/* * Copyright (C) 2014 AChep@xda <artemchep@gmail.com> * * 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 2 * of the License, or (at your option) 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, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301, USA. */ package com.achep.acdisplay.ui.fragments; import android.app.Activity; import android.app.Fragment; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ScrollView; import android.widget.TextView; import com.achep.acdisplay.R; import com.achep.acdisplay.blacklist.Blacklist; import com.achep.acdisplay.blacklist.options.HideOption; import com.achep.acdisplay.blacklist.options.NonClearableOption; import com.achep.acdisplay.blacklist.options.Option; import com.achep.acdisplay.blacklist.options.RestrictOption; import com.achep.base.utils.ViewUtils; /** * Created by Artem on 09.02.14. */ public class BlacklistAppFragment extends Fragment { public static final String ARGS_PACKAGE_NAME = "package_name"; private static final String SAVE_KEY_PACKAGE_NAME = "package_name"; private static final String SAVE_KEY_SCROLL_VIEW_X = "scroll_view_x"; private static final String SAVE_KEY_SCROLL_VIEW_Y = "scroll_view_y"; private Option[] mOptions; private String mPackageName; // header private ImageView mAppIcon; private TextView mAppName; private TextView mAppPackageName; // options private LinearLayout mContainer; private ScrollView mScrollView; private String extractPackageName(Bundle args, Bundle savedInstanceState) { String packageName; if (args != null) { packageName = args.getString(ARGS_PACKAGE_NAME); if (packageName != null) return packageName; } if (savedInstanceState != null) { packageName = savedInstanceState.getString(SAVE_KEY_PACKAGE_NAME); if (packageName != null) return packageName; } return ""; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Activity activity = getActivity(); Blacklist blacklist = Blacklist.getInstance(); mPackageName = extractPackageName(getArguments(), savedInstanceState); mOptions = new Option[]{ new HideOption(activity, new CheckBox(activity), blacklist, mPackageName), new RestrictOption(activity, new CheckBox(activity), blacklist, mPackageName), new NonClearableOption(activity, new CheckBox(activity), blacklist, mPackageName) }; } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putString(SAVE_KEY_PACKAGE_NAME, mPackageName); outState.putInt(SAVE_KEY_SCROLL_VIEW_X, mScrollView.getScrollX()); outState.putInt(SAVE_KEY_SCROLL_VIEW_Y, mScrollView.getScrollY()); } @Override public void onResume() { super.onResume(); for (Option option : mOptions) { option.resume(); } } @Override public void onPause() { super.onPause(); for (Option option : mOptions) { option.pause(); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_blacklist_app_config, container, false); assert view != null; // Hide switch from the header mAppIcon = (ImageView) view.findViewById(R.id.icon); mAppName = (TextView) view.findViewById(R.id.title); mAppPackageName = (TextView) view.findViewById(R.id.summary); // Options list mScrollView = (ScrollView) view.findViewById(R.id.scrollview); mContainer = (LinearLayout) view.findViewById(R.id.container); buildOptionsList(); if (savedInstanceState != null) { // Restore scroll position final int scrollX = savedInstanceState.getInt(SAVE_KEY_SCROLL_VIEW_X); final int scrollY = savedInstanceState.getInt(SAVE_KEY_SCROLL_VIEW_Y); mScrollView.post(new Runnable() { @Override public void run() { mScrollView.scrollTo(scrollX, scrollY); } }); } displayApp(); return view; } private void buildOptionsList() { mContainer.removeAllViews(); LayoutInflater inflater = getActivity().getLayoutInflater(); for (Option option : mOptions) { View view = inflater.inflate(R.layout.preference_blacklist_app_config, mContainer, false); ImageView icon = (ImageView) view.findViewById(R.id.icon); TextView title = (TextView) view.findViewById(android.R.id.title); TextView summary = (TextView) view.findViewById(android.R.id.summary); icon.setImageDrawable(option.icon); ViewUtils.safelySetText(title, option.title); ViewUtils.safelySetText(summary, option.summary); final CheckBox checkBox = (CheckBox) view.findViewById(R.id.checkbox); option.setCompoundButton(checkBox); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { checkBox.toggle(); } }); mContainer.addView(view); } } private void displayApp() { mScrollView.scrollTo(0, 0); // Update header final PackageManager pm = getActivity().getPackageManager(); try { ApplicationInfo ai = pm.getApplicationInfo(mPackageName, 0); mAppIcon.setImageDrawable(pm.getApplicationIcon(ai)); mAppName.setText(pm.getApplicationLabel(ai)); mAppPackageName.setText(mPackageName); } catch (PackageManager.NameNotFoundException e) { mAppName.setText("Name not found"); } } }