aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/InstallDialogFragmentHelper.java
blob: b2213ed1025daabca57b9d9641cb595867a19bc8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/*
 * Copyright (C) 2012-2014 Dominik Schürmann <dominik@dominikschuermann.de>
 *
 * 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
 * (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, see <http://www.gnu.org/licenses/>.
 */

package org.sufficientlysecure.keychain.ui.util;

import android.app.Activity;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
import android.support.v7.app.AlertDialog;
import android.view.ContextThemeWrapper;

import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.ui.dialog.CustomAlertDialogBuilder;
import org.sufficientlysecure.keychain.ui.util.ThemeChanger;
import org.sufficientlysecure.keychain.util.Log;

public class InstallDialogFragmentHelper {
    private static final String ARG_MESSENGER = "messenger";
    private static final String ARG_TITLE = "title";
    private static final String ARG_MESSAGE = "message";
    private static final String ARG_MIDDLE_BUTTON = "middleButton";
    private static final String ARG_INSTALL_PATH = "installPath";
    private static final String ARG_USE_MIDDLE_BUTTON = "useMiddleButton";

    private static final String PLAY_STORE_PATH = "market://search?q=pname:";

    public static void wrapIntoArgs(Messenger messenger, int title, int message, String packageToInstall,
                                      int middleButton, boolean useMiddleButton, Bundle args) {
        args.putParcelable(ARG_MESSENGER, messenger);

        args.putInt(ARG_TITLE, title);
        args.putInt(ARG_MESSAGE, message);
        args.putInt(ARG_MIDDLE_BUTTON, middleButton);
        args.putString(ARG_INSTALL_PATH, PLAY_STORE_PATH + packageToInstall);
        args.putBoolean(ARG_USE_MIDDLE_BUTTON, useMiddleButton);
    }

    public static AlertDialog getInstallDialogFromArgs(Bundle args, final Activity activity,
                                                       final int messengerMiddleButtonClicked,
                                                       final int messengerDialogDimissed) {
        final Messenger messenger = args.getParcelable(ARG_MESSENGER);

        final int title = args.getInt(ARG_TITLE);
        final int message = args.getInt(ARG_MESSAGE);
        final int middleButton = args.getInt(ARG_MIDDLE_BUTTON);
        final String installPath = args.getString(ARG_INSTALL_PATH);
        final boolean useMiddleButton = args.getBoolean(ARG_USE_MIDDLE_BUTTON);

        ContextThemeWrapper theme = ThemeChanger.getDialogThemeWrapper(activity);
        CustomAlertDialogBuilder builder = new CustomAlertDialogBuilder(theme);

        builder.setTitle(title).setMessage(message);

        builder.setNegativeButton(R.string.orbot_install_dialog_cancel,
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Message msg = Message.obtain();
                        msg.what = messengerDialogDimissed;
                        try {
                            messenger.send(msg);
                        } catch (RemoteException e) {
                            Log.w(Constants.TAG, "Exception sending message, Is handler present?", e);
                        } catch (NullPointerException e) {
                            Log.w(Constants.TAG, "Messenger is null!", e);
                        }
                    }
                });

        builder.setPositiveButton(R.string.orbot_install_dialog_install,
                new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Uri uri = Uri.parse(installPath);
                        Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                        activity.startActivity(intent);

                        Message msg = Message.obtain();
                        msg.what = messengerDialogDimissed;
                        try {
                            messenger.send(msg);
                        } catch (RemoteException e) {
                            Log.w(Constants.TAG, "Exception sending message, Is handler present?", e);
                        } catch (NullPointerException e) {
                            Log.w(Constants.TAG, "Messenger is null!", e);
                        }
                    }
                }
        );

        if (useMiddleButton) {
            builder.setNeutralButton(middleButton,
                    new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            Message msg = Message.obtain();
                            msg.what = messengerMiddleButtonClicked;
                            try {
                                messenger.send(msg);
                            } catch (RemoteException e) {
                                Log.w(Constants.TAG, "Exception sending message, Is handler present?", e);
                            } catch (NullPointerException e) {
                                Log.w(Constants.TAG, "Messenger is null!", e);
                            }
                        }
                    }
            );
        }

        return builder.show();
    }
}