12388251fcd8def03a6bbc91382e84db085cf4253Adam Powell/*
22388251fcd8def03a6bbc91382e84db085cf4253Adam Powell * Copyright (C) 2016 The Android Open Source Project
32388251fcd8def03a6bbc91382e84db085cf4253Adam Powell *
42388251fcd8def03a6bbc91382e84db085cf4253Adam Powell * Licensed under the Apache License, Version 2.0 (the "License");
52388251fcd8def03a6bbc91382e84db085cf4253Adam Powell * you may not use this file except in compliance with the License.
62388251fcd8def03a6bbc91382e84db085cf4253Adam Powell * You may obtain a copy of the License at
72388251fcd8def03a6bbc91382e84db085cf4253Adam Powell *
82388251fcd8def03a6bbc91382e84db085cf4253Adam Powell *      http://www.apache.org/licenses/LICENSE-2.0
92388251fcd8def03a6bbc91382e84db085cf4253Adam Powell *
102388251fcd8def03a6bbc91382e84db085cf4253Adam Powell * Unless required by applicable law or agreed to in writing, software
112388251fcd8def03a6bbc91382e84db085cf4253Adam Powell * distributed under the License is distributed on an "AS IS" BASIS,
122388251fcd8def03a6bbc91382e84db085cf4253Adam Powell * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132388251fcd8def03a6bbc91382e84db085cf4253Adam Powell * See the License for the specific language governing permissions and
142388251fcd8def03a6bbc91382e84db085cf4253Adam Powell * limitations under the License.
152388251fcd8def03a6bbc91382e84db085cf4253Adam Powell */
162388251fcd8def03a6bbc91382e84db085cf4253Adam Powell
172388251fcd8def03a6bbc91382e84db085cf4253Adam Powell
182388251fcd8def03a6bbc91382e84db085cf4253Adam Powellpackage com.android.internal.app;
192388251fcd8def03a6bbc91382e84db085cf4253Adam Powell
202388251fcd8def03a6bbc91382e84db085cf4253Adam Powellimport android.app.AlertDialog.Builder;
212388251fcd8def03a6bbc91382e84db085cf4253Adam Powellimport android.app.Dialog;
222388251fcd8def03a6bbc91382e84db085cf4253Adam Powellimport android.app.DialogFragment;
232388251fcd8def03a6bbc91382e84db085cf4253Adam Powellimport android.content.ComponentName;
242388251fcd8def03a6bbc91382e84db085cf4253Adam Powellimport android.content.DialogInterface;
252388251fcd8def03a6bbc91382e84db085cf4253Adam Powellimport android.content.Intent;
262388251fcd8def03a6bbc91382e84db085cf4253Adam Powellimport android.content.SharedPreferences;
272388251fcd8def03a6bbc91382e84db085cf4253Adam Powellimport android.net.Uri;
282388251fcd8def03a6bbc91382e84db085cf4253Adam Powellimport android.os.Bundle;
292388251fcd8def03a6bbc91382e84db085cf4253Adam Powellimport android.provider.Settings;
302388251fcd8def03a6bbc91382e84db085cf4253Adam Powell
312388251fcd8def03a6bbc91382e84db085cf4253Adam Powellimport com.android.internal.R;
322388251fcd8def03a6bbc91382e84db085cf4253Adam Powell
332388251fcd8def03a6bbc91382e84db085cf4253Adam Powell/**
342388251fcd8def03a6bbc91382e84db085cf4253Adam Powell * Shows a dialog with actions to take on a chooser target
352388251fcd8def03a6bbc91382e84db085cf4253Adam Powell */
362388251fcd8def03a6bbc91382e84db085cf4253Adam Powellpublic class ResolverTargetActionsDialogFragment extends DialogFragment
372388251fcd8def03a6bbc91382e84db085cf4253Adam Powell        implements DialogInterface.OnClickListener {
382388251fcd8def03a6bbc91382e84db085cf4253Adam Powell    private static final String NAME_KEY = "componentName";
392388251fcd8def03a6bbc91382e84db085cf4253Adam Powell    private static final String PINNED_KEY = "pinned";
402388251fcd8def03a6bbc91382e84db085cf4253Adam Powell    private static final String TITLE_KEY = "title";
412388251fcd8def03a6bbc91382e84db085cf4253Adam Powell
422388251fcd8def03a6bbc91382e84db085cf4253Adam Powell    // Sync with R.array.resolver_target_actions_* resources
432388251fcd8def03a6bbc91382e84db085cf4253Adam Powell    private static final int TOGGLE_PIN_INDEX = 0;
442388251fcd8def03a6bbc91382e84db085cf4253Adam Powell    private static final int APP_INFO_INDEX = 1;
452388251fcd8def03a6bbc91382e84db085cf4253Adam Powell
462388251fcd8def03a6bbc91382e84db085cf4253Adam Powell    public ResolverTargetActionsDialogFragment() {
472388251fcd8def03a6bbc91382e84db085cf4253Adam Powell    }
482388251fcd8def03a6bbc91382e84db085cf4253Adam Powell
492388251fcd8def03a6bbc91382e84db085cf4253Adam Powell    public ResolverTargetActionsDialogFragment(CharSequence title, ComponentName name,
502388251fcd8def03a6bbc91382e84db085cf4253Adam Powell            boolean pinned) {
512388251fcd8def03a6bbc91382e84db085cf4253Adam Powell        Bundle args = new Bundle();
522388251fcd8def03a6bbc91382e84db085cf4253Adam Powell        args.putCharSequence(TITLE_KEY, title);
532388251fcd8def03a6bbc91382e84db085cf4253Adam Powell        args.putParcelable(NAME_KEY, name);
542388251fcd8def03a6bbc91382e84db085cf4253Adam Powell        args.putBoolean(PINNED_KEY, pinned);
552388251fcd8def03a6bbc91382e84db085cf4253Adam Powell        setArguments(args);
562388251fcd8def03a6bbc91382e84db085cf4253Adam Powell    }
572388251fcd8def03a6bbc91382e84db085cf4253Adam Powell
582388251fcd8def03a6bbc91382e84db085cf4253Adam Powell    @Override
592388251fcd8def03a6bbc91382e84db085cf4253Adam Powell    public Dialog onCreateDialog(Bundle savedInstanceState) {
602388251fcd8def03a6bbc91382e84db085cf4253Adam Powell        final Bundle args = getArguments();
612388251fcd8def03a6bbc91382e84db085cf4253Adam Powell        final int itemRes = args.getBoolean(PINNED_KEY, false)
622388251fcd8def03a6bbc91382e84db085cf4253Adam Powell                ? R.array.resolver_target_actions_unpin
632388251fcd8def03a6bbc91382e84db085cf4253Adam Powell                : R.array.resolver_target_actions_pin;
642388251fcd8def03a6bbc91382e84db085cf4253Adam Powell        return new Builder(getContext())
652388251fcd8def03a6bbc91382e84db085cf4253Adam Powell                .setCancelable(true)
662388251fcd8def03a6bbc91382e84db085cf4253Adam Powell                .setItems(itemRes, this)
672388251fcd8def03a6bbc91382e84db085cf4253Adam Powell                .setTitle(args.getCharSequence(TITLE_KEY))
682388251fcd8def03a6bbc91382e84db085cf4253Adam Powell                .create();
692388251fcd8def03a6bbc91382e84db085cf4253Adam Powell    }
702388251fcd8def03a6bbc91382e84db085cf4253Adam Powell
712388251fcd8def03a6bbc91382e84db085cf4253Adam Powell    @Override
722388251fcd8def03a6bbc91382e84db085cf4253Adam Powell    public void onClick(DialogInterface dialog, int which) {
732388251fcd8def03a6bbc91382e84db085cf4253Adam Powell        final Bundle args = getArguments();
742388251fcd8def03a6bbc91382e84db085cf4253Adam Powell        ComponentName name = args.getParcelable(NAME_KEY);
752388251fcd8def03a6bbc91382e84db085cf4253Adam Powell        switch (which) {
762388251fcd8def03a6bbc91382e84db085cf4253Adam Powell            case TOGGLE_PIN_INDEX:
772388251fcd8def03a6bbc91382e84db085cf4253Adam Powell                SharedPreferences sp = ChooserActivity.getPinnedSharedPrefs(getContext());
782388251fcd8def03a6bbc91382e84db085cf4253Adam Powell                final String key = name.flattenToString();
792388251fcd8def03a6bbc91382e84db085cf4253Adam Powell                boolean currentVal = sp.getBoolean(name.flattenToString(), false);
802388251fcd8def03a6bbc91382e84db085cf4253Adam Powell                if (currentVal) {
812388251fcd8def03a6bbc91382e84db085cf4253Adam Powell                    sp.edit().remove(key).apply();
822388251fcd8def03a6bbc91382e84db085cf4253Adam Powell                } else {
832388251fcd8def03a6bbc91382e84db085cf4253Adam Powell                    sp.edit().putBoolean(key, true).apply();
842388251fcd8def03a6bbc91382e84db085cf4253Adam Powell                }
852388251fcd8def03a6bbc91382e84db085cf4253Adam Powell
862388251fcd8def03a6bbc91382e84db085cf4253Adam Powell                // Force the chooser to requery and resort things
872388251fcd8def03a6bbc91382e84db085cf4253Adam Powell                getActivity().recreate();
882388251fcd8def03a6bbc91382e84db085cf4253Adam Powell                break;
892388251fcd8def03a6bbc91382e84db085cf4253Adam Powell            case APP_INFO_INDEX:
902388251fcd8def03a6bbc91382e84db085cf4253Adam Powell                Intent in = new Intent().setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
912388251fcd8def03a6bbc91382e84db085cf4253Adam Powell                        .setData(Uri.fromParts("package", name.getPackageName(), null))
922388251fcd8def03a6bbc91382e84db085cf4253Adam Powell                        .addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
932388251fcd8def03a6bbc91382e84db085cf4253Adam Powell                startActivity(in);
942388251fcd8def03a6bbc91382e84db085cf4253Adam Powell                break;
952388251fcd8def03a6bbc91382e84db085cf4253Adam Powell        }
962388251fcd8def03a6bbc91382e84db085cf4253Adam Powell        dismiss();
972388251fcd8def03a6bbc91382e84db085cf4253Adam Powell    }
982388251fcd8def03a6bbc91382e84db085cf4253Adam Powell}
99