summaryrefslogtreecommitdiffstats
path: root/src/com/android/launcher3/HiddenFolderFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/launcher3/HiddenFolderFragment.java')
-rw-r--r--src/com/android/launcher3/HiddenFolderFragment.java376
1 files changed, 0 insertions, 376 deletions
diff --git a/src/com/android/launcher3/HiddenFolderFragment.java b/src/com/android/launcher3/HiddenFolderFragment.java
deleted file mode 100644
index 97c4dfd44..000000000
--- a/src/com/android/launcher3/HiddenFolderFragment.java
+++ /dev/null
@@ -1,376 +0,0 @@
-/*
- * Copyright (C) 2015 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.launcher3;
-
-import android.app.Fragment;
-import android.app.FragmentTransaction;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.graphics.drawable.Drawable;
-import android.media.Image;
-import android.os.AsyncTask;
-import android.os.Bundle;
-import android.text.InputType;
-import android.util.Pair;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup;
-import android.view.inputmethod.EditorInfo;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.ArrayAdapter;
-import android.widget.EditText;
-import android.widget.FrameLayout;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.ListView;
-import android.widget.TextView;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.concurrent.ConcurrentHashMap;
-
-public class HiddenFolderFragment extends Fragment {
- public static final String HIDDEN_FOLDER_FRAGMENT = "hiddenFolderFragment";
- public static final String HIDDEN_FOLDER_NAME = "hiddenFolderName";
- public static final String HIDDEN_FOLDER_STATUS = "hiddenFolderStatus";
- public static final String HIDDEN_FOLDER_INFO = "hiddenFolderInfo";
- public static final String HIDDEN_FOLDER_INFO_TITLES = "hiddenFolderInfoTitles";
- public static final String HIDDEN_FOLDER_LAUNCH = "hiddenFolderLaunchPosition";
-
- private static final int REQ_LOCK_PATTERN = 1;
-
- private boolean mHidden;
- private PackageManager mPackageManager;
- private AppsAdapter mAppsAdapter;
- private ArrayList<AppEntry> mAppEntries;
-
- private EditText mFolderName;
- private ListView mListView;
-
- private Launcher mLauncher;
-
- private boolean mAuth = false;
- private boolean mSent = false;
-
- private OnClickListener mClicklistener = new OnClickListener() {
- @Override
- public void onClick(View v) {
- mHidden = !mHidden;
-
- ImageView mLock = (ImageView) v;
- Drawable mLockIcon = mHidden ? getResources().getDrawable(R.drawable.folder_locked)
- : getResources().getDrawable(R.drawable.folder_unlocked);
- mLock.setImageDrawable(mLockIcon);
- }
- };
-
- @Override
- public View onCreateView (LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- View v = inflater.inflate(R.layout.hidden_folder, container, false);
-
- mLauncher = (Launcher) getActivity();
- mPackageManager = mLauncher.getPackageManager();
-
- mHidden = getArguments().getBoolean(HIDDEN_FOLDER_STATUS);
- Folder folder = mLauncher.mHiddenFolderIcon.getFolder();
- String title = mLauncher.mHiddenFolderIcon.getFolderInfo().title.toString();
-
- mFolderName = (EditText) v.findViewById(R.id.folder_name);
- mFolderName.setText(title);
- mFolderName.setSelectAllOnFocus(true);
- mFolderName.setInputType(mFolderName.getInputType() |
- InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS | InputType.TYPE_TEXT_FLAG_CAP_WORDS);
- mFolderName.setImeOptions(EditorInfo.IME_ACTION_DONE);
- mFolderName.setOnEditorActionListener(new TextView.OnEditorActionListener() {
- @Override
- public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
- if (actionId == EditorInfo.IME_ACTION_DONE) {
- doneEditingText(v);
- return true;
- }
- return false;
- }
- });
- mFolderName.setOnFocusChangeListener(new View.OnFocusChangeListener() {
- @Override
- public void onFocusChange(View v, boolean hasFocus) {
- if (!hasFocus) {
- doneEditingText(v);
- }
- }
- });
-
- ImageView mLock = (ImageView) v.findViewById(R.id.folder_lock_icon);
- Drawable mLockIcon = mHidden ? getResources().getDrawable(R.drawable.folder_locked)
- : getResources().getDrawable(R.drawable.folder_unlocked);
- mLock.setImageDrawable(mLockIcon);
- mLock.setOnClickListener(mClicklistener);
-
- mAppsAdapter = new AppsAdapter(mLauncher, R.layout.hidden_apps_list_item);
- mAppsAdapter.setNotifyOnChange(true);
- mAppEntries = loadApps(folder.getComponents());
- mAppsAdapter.clear();
- mAppsAdapter.addAll(mAppEntries);
-
- mListView = (ListView) v.findViewById(R.id.hidden_apps_list);
- mListView.setAdapter(mAppsAdapter);
-
- // Apply insets
- Launcher launcher = (Launcher) getActivity();
- LinearLayout.LayoutParams llp =
- (LinearLayout.LayoutParams) mListView.getLayoutParams();
- // TODO: Uncomment this once the Settings for Trebuchet are merged
- /*llp.bottomMargin += ((FrameLayout.LayoutParams) launcher.getOverviewPanel()
- .findViewById(R.id.settings_container).getLayoutParams()).bottomMargin;*/
- mListView.setLayoutParams(llp);
-
- return v;
- }
-
- private void doneEditingText(View v) {
- InputMethodManager mInputMethodManager = (InputMethodManager)
- mLauncher.getSystemService(Context.INPUT_METHOD_SERVICE);
- mInputMethodManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
-
- mListView.requestFocus();
- }
-
- private ArrayList<AppEntry> loadApps(List<Pair<ComponentName, CharSequence>> items) {
- ArrayList<AppEntry> apps = new ArrayList<AppEntry>();
- int pos = 0;
- for (Pair<ComponentName, CharSequence> item : items) {
- apps.add(new AppEntry(item.first, item.second, pos));
- pos++;
- }
- return apps;
- }
-
- private void removeComponentFromFolder(AppEntry app) {
- ShortcutInfo info;
- if (app.componentName != null) {
- info = mLauncher.mHiddenFolderIcon.getFolder()
- .getShortcutForComponent(app.componentName);
- } else {
- // Shortcut does not have componentName, use position since it maps to
- // reading order position in the folder
- info = mLauncher.mHiddenFolderIcon.getFolder().getShortcutForPosition(app.position);
- }
- mLauncher.mHiddenFolderIcon.getFolderInfo().remove(info);
-
- mAppEntries.remove(app);
- mAppsAdapter.remove(app);
- mAppsAdapter.notifyDataSetInvalidated();
- }
-
- public void saveHiddenFolderStatus(int position) {
- String newTitle = mFolderName.getText().toString();
- if (mLauncher.mHiddenFolderIcon != null) {
- if (position != -1) {
- Folder folder = mLauncher.mHiddenFolderIcon.getFolder();
- View v = folder.getViewFromPosition(position);
- Object tag = v.getTag();
- if (tag instanceof ShortcutInfo) {
- ShortcutInfo shortcut = (ShortcutInfo) tag;
- mLauncher.startActivitySafely(v, shortcut.getIntent(), v.getTag());
- return;
- }
- }
-
- // Folder name
- FolderInfo info = mLauncher.mHiddenFolderIcon.getFolderInfo();
- if (!info.title.equals(newTitle)) {
- info.setTitle(newTitle);
- mLauncher.mHiddenFolderIcon.getFolder().setFolderName();
- LauncherModel.updateItemInDatabase(mLauncher, info);
- }
-
- // Folder hidden status
- if (info.hidden == mHidden) {
- return;
- } else {
- info.hidden = mHidden;
- // flip the boolean value to accomodate framework
- // in framework "false" is "protected" and "true" is "visible"
- mLauncher.mHiddenFolderIcon.getFolder().modifyProtectedApps(!info.hidden);
-
- LauncherModel.updateItemInDatabase(mLauncher, info);
- // We need to make sure this change gets written to the DB before
- // OnResume restarts the process
- mLauncher.mModel.flushWorkerThread();
- }
- }
-
- FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
- fragmentTransaction
- .remove(mLauncher.mHiddenFolderFragment).commit();
- }
-
- public class AppsAdapter extends ArrayAdapter<AppEntry> {
-
- private final LayoutInflater mInflator;
-
- private ConcurrentHashMap<String, Drawable> mIcons;
- private Drawable mDefaultImg;
- private List<AppEntry> mApps;
-
- public AppsAdapter(Context context, int textViewResourceId) {
- super(context, textViewResourceId);
-
- mApps = new ArrayList<AppEntry>();
-
- mInflator = LayoutInflater.from(context);
-
- // set the default icon till the actual app icon is loaded in async
- // task
- mDefaultImg = context.getResources().getDrawable(
- android.R.mipmap.sym_def_app_icon);
- mIcons = new ConcurrentHashMap<String, Drawable>();
- }
-
- @Override
- public View getView(final int position, View convertView,
- ViewGroup parent) {
- final AppViewHolder viewHolder;
-
- if (convertView == null) {
- convertView = mInflator.inflate(
- R.layout.hidden_folder_apps_list_item, parent, false);
- viewHolder = new AppViewHolder(convertView, position);
- convertView.setTag(viewHolder);
- } else {
- viewHolder = (AppViewHolder) convertView.getTag();
- }
-
- final AppEntry app = getItem(position);
-
- viewHolder.title.setText(app.title);
-
- Drawable icon = null;
- if (app.componentName != null) {
- icon = mIcons.get(app.componentName.getPackageName());
- }
- viewHolder.icon.setImageDrawable(icon != null ? icon : mDefaultImg);
- viewHolder.remove.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- removeComponentFromFolder(app);
- }
- });
-
- convertView.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- saveHiddenFolderStatus(position);
- }
- });
-
- return convertView;
- }
-
- @Override
- public boolean hasStableIds() {
- return true;
- }
-
- @Override
- public void notifyDataSetChanged() {
- super.notifyDataSetChanged();
- // If we have new items, we have to load their icons
- // If items were deleted, remove them from our mApps
- List<AppEntry> newApps = new ArrayList<AppEntry>(getCount());
- List<AppEntry> oldApps = new ArrayList<AppEntry>(getCount());
- for (int i = 0; i < getCount(); i++) {
- AppEntry app = getItem(i);
- if (mApps.contains(app)) {
- oldApps.add(app);
- } else {
- newApps.add(app);
- }
- }
-
- if (newApps.size() > 0) {
- new LoadIconsTask().execute(newApps.toArray(new AppEntry[] {}));
- newApps.addAll(oldApps);
- mApps = newApps;
- } else {
- mApps = oldApps;
- }
- }
-
- /**
- * An asynchronous task to load the icons of the installed applications.
- */
- private class LoadIconsTask extends AsyncTask<AppEntry, Void, Void> {
- @Override
- protected Void doInBackground(AppEntry... apps) {
- for (AppEntry app : apps) {
- try {
- // Widget icons do not have a
- if (app.componentName == null ||
- mIcons.containsKey(app.componentName.getPackageName())) {
- continue;
- }
- Drawable icon = mPackageManager
- .getApplicationIcon(app.componentName
- .getPackageName());
- mIcons.put(app.componentName.getPackageName(), icon);
- publishProgress();
- } catch (PackageManager.NameNotFoundException e) {
- // ignored; app will show up with default image
- }
- }
-
- return null;
- }
-
- @Override
- protected void onProgressUpdate(Void... progress) {
- notifyDataSetChanged();
- }
- }
- }
-
- private final class AppEntry {
- public final ComponentName componentName;
- public final CharSequence title;
- public final int position;
-
- public AppEntry(ComponentName component, CharSequence title, int position) {
- this.componentName = component;
- this.title = title;
- this.position = position;
- }
- }
-
- private static class AppViewHolder {
- public final TextView title;
- public final ImageView icon;
- public final ImageView remove;
- public final int position;
-
- public AppViewHolder(View parentView, int position) {
- icon = (ImageView) parentView.findViewById(R.id.icon);
- remove = (ImageView) parentView.findViewById(R.id.remove);
- title = (TextView) parentView.findViewById(R.id.title);
- this.position = position;
- }
- }
-}