View Javadoc
1   package edu.jiangxin.apktoolbox.swing.extend.plugin;
2   
3   import edu.jiangxin.apktoolbox.swing.extend.listener.IPreChangeMenuCallBack;
4   import org.apache.logging.log4j.LogManager;
5   import org.apache.logging.log4j.Logger;
6   
7   import javax.swing.*;
8   
9   /**
10   * This class is used to prepare plugin for change menu.
11   * <p>
12   * All operations in this class will be executed in main thread.
13   */
14  public class ChangeMenuPreparePluginController implements IPreparePluginCallback {
15      private static final Logger logger = LogManager.getLogger(ChangeMenuPreparePluginController.class.getSimpleName());
16      private final String pluginFilename;
17      private final boolean isPluginNeedUnzip;
18      private final boolean isPluginNeedUnzipToSeparateDir;
19  
20      private final IPreChangeMenuCallBack callBack;
21  
22      public static final int RESULT_CHECK_SUCCESS = 0;
23  
24      public static final int RESULT_CHECK_ZIP_EXIST = 1;
25  
26      public static final int RESULT_CHECK_ZIP_NOT_EXIST = 2;
27  
28      public static final int RESULT_DOWNLOAD_SUCCESS = 0;
29  
30      public static final int RESULT_DOWNLOAD_FAILED = -1;
31  
32      public static final int RESULT_DOWNLOAD_CANCELLED = 1;
33  
34      public static final int RESULT_UNZIP_SUCCESS = 0;
35  
36      public static final int RESULT_UNZIP_FAILED = -1;
37  
38      public static final int RESULT_UNZIP_CANCELLED = 1;
39  
40      public ChangeMenuPreparePluginController(String pluginFilename, boolean isPluginNeedUnzip, boolean isPluginNeedUnzipToSeparateDir, IPreChangeMenuCallBack callBack) {
41          this.pluginFilename = pluginFilename;
42          this.isPluginNeedUnzip = isPluginNeedUnzip;
43          this.isPluginNeedUnzipToSeparateDir = isPluginNeedUnzipToSeparateDir;
44          this.callBack = callBack;
45      }
46  
47      @Override
48      public void onPrepareStarted() {
49          PluginUtils.checkPlugin(pluginFilename, isPluginNeedUnzip, this);
50      }
51  
52      @Override
53      public void onCheckFinished(int result) {
54          switch (result) {
55              case RESULT_CHECK_SUCCESS -> onPrepareFinished();
56              case RESULT_CHECK_ZIP_EXIST -> PluginUtils.unzipPlugin(pluginFilename, isPluginNeedUnzipToSeparateDir, this);
57              case RESULT_CHECK_ZIP_NOT_EXIST -> {
58                  int userChoose = JOptionPane.showConfirmDialog(null, "未找到对应插件,是否下载", "提示", JOptionPane.YES_NO_OPTION);
59                  if (userChoose == JOptionPane.YES_OPTION) {
60                      PluginUtils.downloadPlugin(pluginFilename, this);
61                  }
62              }
63              default -> logger.info("onCheckFinished: {}", result);
64          }
65      }
66  
67      @Override
68      public void onDownloadFinished(int result) {
69          switch (result) {
70              case RESULT_DOWNLOAD_SUCCESS:
71                  if (isPluginNeedUnzip) {
72                      PluginUtils.unzipPlugin(pluginFilename, isPluginNeedUnzipToSeparateDir, this);
73                  } else {
74                      onPrepareFinished();
75                  }
76                  break;
77              case RESULT_DOWNLOAD_FAILED:
78                  JOptionPane.showMessageDialog(null, "下载失败,请检查网络", "错误", JOptionPane.ERROR_MESSAGE);
79                  break;
80              case RESULT_DOWNLOAD_CANCELLED:
81                  JOptionPane.showMessageDialog(null, "下载取消", "提示", JOptionPane.INFORMATION_MESSAGE);
82                  break;
83              default:
84                  logger.info("onDownloadFinished: {}", result);
85                  break;
86          }
87      }
88  
89      @Override
90      public void onUnzipFinished(int result) {
91          switch (result) {
92              case RESULT_UNZIP_SUCCESS -> onPrepareFinished();
93              case RESULT_UNZIP_FAILED -> JOptionPane.showMessageDialog(null, "解压失败", "错误", JOptionPane.ERROR_MESSAGE);
94              case RESULT_UNZIP_CANCELLED -> JOptionPane.showMessageDialog(null, "解压取消", "提示", JOptionPane.INFORMATION_MESSAGE);
95              default -> logger.info("onUnzipFinished: {}", result);
96          }
97      }
98  
99      @Override
100     public void onPrepareFinished() {
101         if (callBack != null) {
102             callBack.onPreChangeMenuFinished();
103         }
104     }
105 }