mirror of
https://github.com/TonyJiangWJ/Auto.js.git
synced 2026-06-21 21:01:43 +08:00
feat(ui): project icon setting
This commit is contained in:
parent
cce09209a3
commit
54146aa581
@ -53,6 +53,8 @@ import io.reactivex.schedulers.Schedulers;
|
||||
@EActivity(R.layout.activity_build)
|
||||
public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.ProgressCallback {
|
||||
|
||||
private static final int REQUEST_CODE = 44401;
|
||||
|
||||
public static final String EXTRA_SOURCE = BuildActivity.class.getName() + ".extra_source_file";
|
||||
|
||||
private static final String LOG_TAG = "BuildActivity";
|
||||
@ -194,7 +196,7 @@ public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.Prog
|
||||
@Click(R.id.icon)
|
||||
void selectIcon() {
|
||||
ShortcutIconSelectActivity_.intent(this)
|
||||
.startForResult(31209);
|
||||
.startForResult(REQUEST_CODE);
|
||||
}
|
||||
|
||||
@Click(R.id.fab)
|
||||
@ -333,27 +335,13 @@ public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.Prog
|
||||
if (resultCode != RESULT_OK) {
|
||||
return;
|
||||
}
|
||||
String packageName = data.getStringExtra(ShortcutIconSelectActivity.EXTRA_PACKAGE_NAME);
|
||||
if (packageName != null) {
|
||||
try {
|
||||
mIcon.setImageDrawable(getPackageManager().getApplicationIcon(packageName));
|
||||
mIsDefaultIcon = false;
|
||||
} catch (PackageManager.NameNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (data.getData() == null)
|
||||
return;
|
||||
Observable.fromCallable(() -> BitmapFactory.decodeStream(getContentResolver().openInputStream(data.getData())))
|
||||
.subscribeOn(Schedulers.computation())
|
||||
ShortcutIconSelectActivity.getBitmapFromIntent(getApplicationContext(), data)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe((bitmap -> {
|
||||
.subscribe(bitmap -> {
|
||||
mIcon.setImageBitmap(bitmap);
|
||||
mIsDefaultIcon = false;
|
||||
}), error -> {
|
||||
Log.e(LOG_TAG, "decode stream", error);
|
||||
});
|
||||
}, Throwable::printStackTrace);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -1,6 +1,8 @@
|
||||
package org.autojs.autojs.ui.project;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Bitmap;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.design.widget.TextInputEditText;
|
||||
@ -12,7 +14,6 @@ import android.widget.ImageView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.stardust.autojs.project.ProjectConfig;
|
||||
import com.stardust.autojs.runtime.api.Dialogs;
|
||||
import com.stardust.pio.PFiles;
|
||||
|
||||
import org.androidannotations.annotations.AfterViews;
|
||||
@ -22,14 +23,18 @@ import org.androidannotations.annotations.ViewById;
|
||||
import org.autojs.autojs.R;
|
||||
import org.autojs.autojs.model.explorer.ExplorerDirPage;
|
||||
import org.autojs.autojs.model.explorer.ExplorerFileItem;
|
||||
import org.autojs.autojs.model.explorer.ExplorerItem;
|
||||
import org.autojs.autojs.model.explorer.Explorers;
|
||||
import org.autojs.autojs.model.project.ProjectTemplate;
|
||||
import org.autojs.autojs.network.GlideApp;
|
||||
import org.autojs.autojs.theme.dialog.ThemeColorMaterialDialogBuilder;
|
||||
import org.autojs.autojs.ui.BaseActivity;
|
||||
import org.autojs.autojs.ui.shortcut.ShortcutIconSelectActivity;
|
||||
import org.autojs.autojs.ui.shortcut.ShortcutIconSelectActivity_;
|
||||
import org.autojs.autojs.ui.widget.SimpleTextWatcher;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import io.reactivex.Observable;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
@ -44,6 +49,8 @@ public class ProjectConfigActivity extends BaseActivity {
|
||||
|
||||
public static final String EXTRA_DIRECTORY = "directory";
|
||||
|
||||
private static final int REQUEST_CODE = 12477;
|
||||
|
||||
|
||||
@ViewById(R.id.project_location)
|
||||
EditText mProjectLocation;
|
||||
@ -70,6 +77,7 @@ public class ProjectConfigActivity extends BaseActivity {
|
||||
private File mParentDirectory;
|
||||
private ProjectConfig mProjectConfig;
|
||||
private boolean mNewProject;
|
||||
private Bitmap mIconBitmap;
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
@ -118,6 +126,12 @@ public class ProjectConfigActivity extends BaseActivity {
|
||||
mVersionName.setText(mProjectConfig.getVersionName());
|
||||
mMainFileName.setText(mProjectConfig.getMainScriptFile());
|
||||
mProjectLocation.setVisibility(View.GONE);
|
||||
String icon = mProjectConfig.getIcon();
|
||||
if (icon != null) {
|
||||
GlideApp.with(this)
|
||||
.load(new File(mDirectory, icon))
|
||||
.into(mIcon);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -128,9 +142,22 @@ public class ProjectConfigActivity extends BaseActivity {
|
||||
if (!checkInputs()) {
|
||||
return;
|
||||
}
|
||||
if (mIconBitmap != null) {
|
||||
saveIcon(mIconBitmap)
|
||||
.subscribe(ignored -> saveProjectConfig(), e -> {
|
||||
e.printStackTrace();
|
||||
Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show();
|
||||
});
|
||||
} else {
|
||||
saveProjectConfig();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
private void saveProjectConfig() {
|
||||
if (mNewProject) {
|
||||
String location = mProjectLocation.getText().toString();
|
||||
new ProjectTemplate(mProjectConfig, new File(location))
|
||||
new ProjectTemplate(mProjectConfig, mDirectory)
|
||||
.newProject()
|
||||
.subscribe(ignored -> {
|
||||
Explorers.workspace().notifyChildrenChanged(new ExplorerDirPage(mParentDirectory, null));
|
||||
@ -158,12 +185,22 @@ public class ProjectConfigActivity extends BaseActivity {
|
||||
}
|
||||
}
|
||||
|
||||
@Click(R.id.icon)
|
||||
void selectIcon() {
|
||||
ShortcutIconSelectActivity_.intent(this)
|
||||
.startForResult(REQUEST_CODE);
|
||||
}
|
||||
|
||||
private void syncProjectConfig() {
|
||||
mProjectConfig.setName(mAppName.getText().toString());
|
||||
mProjectConfig.setVersionCode(Integer.parseInt(mVersionCode.getText().toString()));
|
||||
mProjectConfig.setVersionName(mVersionName.getText().toString());
|
||||
mProjectConfig.setMainScriptFile(mMainFileName.getText().toString());
|
||||
mProjectConfig.setPackageName(mPackageName.getText().toString());
|
||||
if (mNewProject) {
|
||||
String location = mProjectLocation.getText().toString();
|
||||
mDirectory = new File(location);
|
||||
}
|
||||
//mProjectConfig.getLaunchConfig().setHideLogs(true);
|
||||
}
|
||||
|
||||
@ -184,4 +221,43 @@ public class ProjectConfigActivity extends BaseActivity {
|
||||
editText.setError(hint + getString(R.string.text_should_not_be_empty));
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
if (resultCode != RESULT_OK) {
|
||||
return;
|
||||
}
|
||||
ShortcutIconSelectActivity.getBitmapFromIntent(getApplicationContext(), data)
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(bitmap -> {
|
||||
mIcon.setImageBitmap(bitmap);
|
||||
mIconBitmap = bitmap;
|
||||
},
|
||||
Throwable::printStackTrace);
|
||||
}
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
private Observable<String> saveIcon(Bitmap b) {
|
||||
return Observable.just(b)
|
||||
.map(bitmap -> {
|
||||
String iconPath = mProjectConfig.getIcon();
|
||||
if (iconPath == null) {
|
||||
iconPath = "res/logo.png";
|
||||
}
|
||||
File iconFile = new File(mDirectory, iconPath);
|
||||
PFiles.ensureDir(iconFile.getPath());
|
||||
FileOutputStream fos = new FileOutputStream(iconFile);
|
||||
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
|
||||
fos.close();
|
||||
return iconPath;
|
||||
})
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.doOnNext(iconPath -> mProjectConfig.setIcon(iconPath));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -5,7 +5,10 @@ import android.content.Intent;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ShortcutManager;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.net.Uri;
|
||||
import android.support.v7.widget.GridLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
@ -16,6 +19,7 @@ import android.view.ViewGroup;
|
||||
import android.widget.ImageView;
|
||||
|
||||
import org.autojs.autojs.R;
|
||||
import org.autojs.autojs.tool.BitmapTool;
|
||||
import org.autojs.autojs.ui.BaseActivity;
|
||||
|
||||
import org.androidannotations.annotations.AfterViews;
|
||||
@ -24,6 +28,7 @@ import org.androidannotations.annotations.ViewById;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Callable;
|
||||
|
||||
import io.reactivex.Observable;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
@ -97,6 +102,23 @@ public class ShortcutIconSelectActivity extends BaseActivity {
|
||||
}
|
||||
}
|
||||
|
||||
public static Observable<Bitmap> getBitmapFromIntent(Context context, Intent data) {
|
||||
String packageName = data.getStringExtra(EXTRA_PACKAGE_NAME);
|
||||
if (packageName != null) {
|
||||
return Observable.fromCallable(() -> {
|
||||
Drawable drawable = context.getPackageManager().getApplicationIcon(packageName);
|
||||
return BitmapTool.drawableToBitmap(drawable);
|
||||
});
|
||||
}
|
||||
Uri uri = data.getData();
|
||||
if (uri == null) {
|
||||
return Observable.error(new IllegalArgumentException("invalid intent"));
|
||||
}
|
||||
return Observable.fromCallable(() ->
|
||||
BitmapFactory.decodeStream(context.getContentResolver().openInputStream(uri))
|
||||
);
|
||||
}
|
||||
|
||||
private class AppItem {
|
||||
Drawable icon;
|
||||
ApplicationInfo info;
|
||||
|
||||
@ -88,7 +88,6 @@
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:showDividers=""
|
||||
android:orientation="vertical">
|
||||
|
||||
<android.support.design.widget.TextInputLayout
|
||||
|
||||
Loading…
Reference in New Issue
Block a user