/* * MaxLock, an Xposed applock module for Android * Copyright (C) 2014-2016 Max Rumpf alias Maxr1998 * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package de.Maxr1998.xposed.maxlock.ui.settings; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; import java.util.Locale; import de.Maxr1998.xposed.maxlock.Common; import de.Maxr1998.xposed.maxlock.R; public class LogViewerFragment extends Fragment { private RecyclerView mLogRecycler; private TextView mEmptyText; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); } @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { getActivity().setTitle(getString(R.string.pref_screen_logs)); View rootView = inflater.inflate(R.layout.fragment_logs, container, false); mLogRecycler = (RecyclerView) rootView.findViewById(R.id.log_recycler); mEmptyText = (TextView) rootView.findViewById(R.id.logs_empty_text); List<String> text = new ArrayList<>(); try { BufferedReader br = new BufferedReader(new FileReader(getActivity().getApplicationInfo().dataDir + File.separator + Common.LOG_FILE)); String line; while ((line = br.readLine()) != null) { text.add(line); } } catch (FileNotFoundException e) { mLogRecycler.setVisibility(View.GONE); mEmptyText.setVisibility(View.VISIBLE); return rootView; } catch (IOException e) { e.printStackTrace(); } mLogRecycler.setLayoutManager(new LinearLayoutManager(getActivity())); mLogRecycler.setItemAnimator(new DefaultItemAnimator()); LogRecyclerAdapter adapter = new LogRecyclerAdapter(text); mLogRecycler.setAdapter(adapter); return rootView; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); getActivity().setTitle(getString(R.string.pref_screen_logs)); //noinspection ConstantConditions ((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.logviewer_menu, menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.toolbar_delete_log) { File file = new File(getActivity().getApplicationInfo().dataDir + File.separator + Common.LOG_FILE); //noinspection ResultOfMethodCallIgnored file.delete(); mLogRecycler.setVisibility(View.GONE); mEmptyText.findViewById(R.id.logs_empty_text).setVisibility(View.VISIBLE); return true; } return super.onOptionsItemSelected(item); } private static class LogRecyclerAdapter extends RecyclerView.Adapter<LogRecyclerAdapter.LogViewHolder> { private List<String> data; public LogRecyclerAdapter(@NonNull List<String> d) { data = d; } @Override public LogViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_log_item, parent, false); return new LogViewHolder(v); } @Override public void onBindViewHolder(LogViewHolder holder, int p) { int position = holder.getLayoutPosition(); String mCurrent = data.get(position); boolean showDate; if (position < 1) { showDate = true; } else { try { SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy", Locale.getDefault()); showDate = sdf.parse(mCurrent.substring(1, 9)).getTime() > sdf.parse(data.get(position - 1).substring(1, 9)).getTime(); } catch (ParseException e) { showDate = false; e.printStackTrace(); } } holder.mDate.setVisibility(showDate ? View.VISIBLE : View.GONE); holder.mDate.setText(showDate ? mCurrent.substring(1, 9).replace('/', '.') : ""); holder.mTime.setText(mCurrent.substring(11, 19)); holder.mAppName.setText(mCurrent.substring(21)); } @Override public int getItemCount() { return data.size(); } protected static class LogViewHolder extends RecyclerView.ViewHolder { protected TextView mDate, mTime, mAppName; public LogViewHolder(View itemView) { super(itemView); mDate = (TextView) itemView.findViewById(R.id.log_item_date); mTime = (TextView) itemView.findViewById(R.id.log_item_time); mAppName = (TextView) itemView.findViewById(R.id.log_item_app_name); } } } }