a
554325746@qq.com
2019-12-31 fa104829ecef68865e5e3bce174515009c6d687b
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
/*
 * Copyright (C) 2015-present, osfans
 * waxaca@163.com https://github.com/osfans
 *
 * 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 com.osfans.trime;
 
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.IBinder;
import android.view.Window;
import android.view.WindowManager;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
 
/** 顯示配色方案列表 */
class ThemeDlg extends AsyncTask {
  private String[] keys;
  private String[] names;
  private int checked;
  private ProgressDialog mProgressDialog;
  private Context mContext;
  private IBinder mToken;
 
  private void selectTheme() {
    String theme = keys[checked].replace(".yaml", "");
    Config config = Config.get();
    config.setTheme(theme);
  }
 
  private void initProgressDialog() {
    mProgressDialog = new ProgressDialog(mContext);
    mProgressDialog.setMessage(mContext.getString(R.string.themes_progress));
    mProgressDialog.setCancelable(false);
    if (mToken != null) {
      Window window = mProgressDialog.getWindow();
      WindowManager.LayoutParams lp = window.getAttributes();
      lp.token = mToken;
      lp.type = Trime.getDialogType();
      window.setAttributes(lp);
      window.addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
    }
  }
 
  public ThemeDlg(Context context) {
    this(context, null);
  }
 
  public ThemeDlg(Context context, IBinder token) {
    mContext = context;
    mToken = token;
    Config config = Config.get(context);
    String theme = config.getTheme() + ".yaml";
    keys = Config.getThemeKeys(true);
    if (keys == null) return;
    Arrays.sort(keys);
    checked = Arrays.binarySearch(keys, theme);
 
    Map<String, String> themeMap = new HashMap<String, String>();
    themeMap.put("tongwenfeng", mContext.getString(R.string.pref_themes_name_tongwenfeng));
    themeMap.put("trime", mContext.getString(R.string.pref_themes_name_trime));
    String[] nameArray = Config.getThemeNames(keys);
    names = new String[nameArray.length];
    for (int i = 0; i < nameArray.length; i++) {
      String themeName = themeMap.get(nameArray[i]);
      if (themeName == null) {
        names[i] = nameArray[i];
      } else {
        names[i] = themeName;
      }
    }
 
    showDialog();
    initProgressDialog();
  }
 
  private void showDialog() {
    AlertDialog mDialog =
        new AlertDialog.Builder(mContext)
            .setTitle(R.string.pref_themes)
            .setCancelable(true)
            .setNegativeButton(android.R.string.cancel, null)
            .setPositiveButton(
                android.R.string.ok,
                new DialogInterface.OnClickListener() {
                  @Override
                  public void onClick(DialogInterface di, int id) {
                    execute();
                  }
                })
            .setSingleChoiceItems(
                names,
                checked,
                new DialogInterface.OnClickListener() {
                  @Override
                  public void onClick(DialogInterface di, int id) {
                    checked = id;
                  }
                })
            .create();
    if (mToken != null) {
      Window window = mDialog.getWindow();
      WindowManager.LayoutParams lp = window.getAttributes();
      lp.token = mToken;
      lp.type = Trime.getDialogType();
      window.setAttributes(lp);
      window.addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
    }
    mDialog.show();
  }
 
  @Override
  protected void onPreExecute() {
    mProgressDialog.show();
  }
 
  @Override
  protected String doInBackground(Object... o) {
    selectTheme();
    return "ok";
  }
 
  protected void onProgressUpdate(Object o) {}
 
  @Override
  protected void onPostExecute(Object o) {
    mProgressDialog.dismiss();
    Trime trime = Trime.getService();
    if (trime != null) trime.initKeyboard(); //實時生效
  }
}