feat(ui): project icon setting
This commit is contained in:
@@ -53,6 +53,8 @@ import io.reactivex.schedulers.Schedulers;
|
|||||||
@EActivity(R.layout.activity_build)
|
@EActivity(R.layout.activity_build)
|
||||||
public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.ProgressCallback {
|
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";
|
public static final String EXTRA_SOURCE = BuildActivity.class.getName() + ".extra_source_file";
|
||||||
|
|
||||||
private static final String LOG_TAG = "BuildActivity";
|
private static final String LOG_TAG = "BuildActivity";
|
||||||
@@ -194,7 +196,7 @@ public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.Prog
|
|||||||
@Click(R.id.icon)
|
@Click(R.id.icon)
|
||||||
void selectIcon() {
|
void selectIcon() {
|
||||||
ShortcutIconSelectActivity_.intent(this)
|
ShortcutIconSelectActivity_.intent(this)
|
||||||
.startForResult(31209);
|
.startForResult(REQUEST_CODE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Click(R.id.fab)
|
@Click(R.id.fab)
|
||||||
@@ -333,27 +335,13 @@ public class BuildActivity extends BaseActivity implements AutoJsApkBuilder.Prog
|
|||||||
if (resultCode != RESULT_OK) {
|
if (resultCode != RESULT_OK) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String packageName = data.getStringExtra(ShortcutIconSelectActivity.EXTRA_PACKAGE_NAME);
|
ShortcutIconSelectActivity.getBitmapFromIntent(getApplicationContext(), data)
|
||||||
if (packageName != null) {
|
.subscribeOn(Schedulers.io())
|
||||||
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())
|
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.subscribe((bitmap -> {
|
.subscribe(bitmap -> {
|
||||||
mIcon.setImageBitmap(bitmap);
|
mIcon.setImageBitmap(bitmap);
|
||||||
mIsDefaultIcon = false;
|
mIsDefaultIcon = false;
|
||||||
}), error -> {
|
}, Throwable::printStackTrace);
|
||||||
Log.e(LOG_TAG, "decode stream", error);
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package org.autojs.autojs.ui.project;
|
package org.autojs.autojs.ui.project;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.graphics.Bitmap;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.annotation.Nullable;
|
import android.support.annotation.Nullable;
|
||||||
import android.support.design.widget.TextInputEditText;
|
import android.support.design.widget.TextInputEditText;
|
||||||
@@ -12,7 +14,6 @@ import android.widget.ImageView;
|
|||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.stardust.autojs.project.ProjectConfig;
|
import com.stardust.autojs.project.ProjectConfig;
|
||||||
import com.stardust.autojs.runtime.api.Dialogs;
|
|
||||||
import com.stardust.pio.PFiles;
|
import com.stardust.pio.PFiles;
|
||||||
|
|
||||||
import org.androidannotations.annotations.AfterViews;
|
import org.androidannotations.annotations.AfterViews;
|
||||||
@@ -22,14 +23,18 @@ import org.androidannotations.annotations.ViewById;
|
|||||||
import org.autojs.autojs.R;
|
import org.autojs.autojs.R;
|
||||||
import org.autojs.autojs.model.explorer.ExplorerDirPage;
|
import org.autojs.autojs.model.explorer.ExplorerDirPage;
|
||||||
import org.autojs.autojs.model.explorer.ExplorerFileItem;
|
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.explorer.Explorers;
|
||||||
import org.autojs.autojs.model.project.ProjectTemplate;
|
import org.autojs.autojs.model.project.ProjectTemplate;
|
||||||
|
import org.autojs.autojs.network.GlideApp;
|
||||||
import org.autojs.autojs.theme.dialog.ThemeColorMaterialDialogBuilder;
|
import org.autojs.autojs.theme.dialog.ThemeColorMaterialDialogBuilder;
|
||||||
import org.autojs.autojs.ui.BaseActivity;
|
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 org.autojs.autojs.ui.widget.SimpleTextWatcher;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
import io.reactivex.Observable;
|
import io.reactivex.Observable;
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
@@ -44,6 +49,8 @@ public class ProjectConfigActivity extends BaseActivity {
|
|||||||
|
|
||||||
public static final String EXTRA_DIRECTORY = "directory";
|
public static final String EXTRA_DIRECTORY = "directory";
|
||||||
|
|
||||||
|
private static final int REQUEST_CODE = 12477;
|
||||||
|
|
||||||
|
|
||||||
@ViewById(R.id.project_location)
|
@ViewById(R.id.project_location)
|
||||||
EditText mProjectLocation;
|
EditText mProjectLocation;
|
||||||
@@ -70,6 +77,7 @@ public class ProjectConfigActivity extends BaseActivity {
|
|||||||
private File mParentDirectory;
|
private File mParentDirectory;
|
||||||
private ProjectConfig mProjectConfig;
|
private ProjectConfig mProjectConfig;
|
||||||
private boolean mNewProject;
|
private boolean mNewProject;
|
||||||
|
private Bitmap mIconBitmap;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
@@ -118,6 +126,12 @@ public class ProjectConfigActivity extends BaseActivity {
|
|||||||
mVersionName.setText(mProjectConfig.getVersionName());
|
mVersionName.setText(mProjectConfig.getVersionName());
|
||||||
mMainFileName.setText(mProjectConfig.getMainScriptFile());
|
mMainFileName.setText(mProjectConfig.getMainScriptFile());
|
||||||
mProjectLocation.setVisibility(View.GONE);
|
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()) {
|
if (!checkInputs()) {
|
||||||
return;
|
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) {
|
if (mNewProject) {
|
||||||
String location = mProjectLocation.getText().toString();
|
new ProjectTemplate(mProjectConfig, mDirectory)
|
||||||
new ProjectTemplate(mProjectConfig, new File(location))
|
|
||||||
.newProject()
|
.newProject()
|
||||||
.subscribe(ignored -> {
|
.subscribe(ignored -> {
|
||||||
Explorers.workspace().notifyChildrenChanged(new ExplorerDirPage(mParentDirectory, null));
|
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() {
|
private void syncProjectConfig() {
|
||||||
mProjectConfig.setName(mAppName.getText().toString());
|
mProjectConfig.setName(mAppName.getText().toString());
|
||||||
mProjectConfig.setVersionCode(Integer.parseInt(mVersionCode.getText().toString()));
|
mProjectConfig.setVersionCode(Integer.parseInt(mVersionCode.getText().toString()));
|
||||||
mProjectConfig.setVersionName(mVersionName.getText().toString());
|
mProjectConfig.setVersionName(mVersionName.getText().toString());
|
||||||
mProjectConfig.setMainScriptFile(mMainFileName.getText().toString());
|
mProjectConfig.setMainScriptFile(mMainFileName.getText().toString());
|
||||||
mProjectConfig.setPackageName(mPackageName.getText().toString());
|
mProjectConfig.setPackageName(mPackageName.getText().toString());
|
||||||
|
if (mNewProject) {
|
||||||
|
String location = mProjectLocation.getText().toString();
|
||||||
|
mDirectory = new File(location);
|
||||||
|
}
|
||||||
//mProjectConfig.getLaunchConfig().setHideLogs(true);
|
//mProjectConfig.getLaunchConfig().setHideLogs(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,4 +221,43 @@ public class ProjectConfigActivity extends BaseActivity {
|
|||||||
editText.setError(hint + getString(R.string.text_should_not_be_empty));
|
editText.setError(hint + getString(R.string.text_should_not_be_empty));
|
||||||
return false;
|
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.ApplicationInfo;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.ShortcutManager;
|
import android.content.pm.ShortcutManager;
|
||||||
|
import android.graphics.Bitmap;
|
||||||
|
import android.graphics.BitmapFactory;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.net.Uri;
|
||||||
import android.support.v7.widget.GridLayoutManager;
|
import android.support.v7.widget.GridLayoutManager;
|
||||||
import android.support.v7.widget.RecyclerView;
|
import android.support.v7.widget.RecyclerView;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
@@ -16,6 +19,7 @@ import android.view.ViewGroup;
|
|||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
|
|
||||||
import org.autojs.autojs.R;
|
import org.autojs.autojs.R;
|
||||||
|
import org.autojs.autojs.tool.BitmapTool;
|
||||||
import org.autojs.autojs.ui.BaseActivity;
|
import org.autojs.autojs.ui.BaseActivity;
|
||||||
|
|
||||||
import org.androidannotations.annotations.AfterViews;
|
import org.androidannotations.annotations.AfterViews;
|
||||||
@@ -24,6 +28,7 @@ import org.androidannotations.annotations.ViewById;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.Callable;
|
||||||
|
|
||||||
import io.reactivex.Observable;
|
import io.reactivex.Observable;
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
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 {
|
private class AppItem {
|
||||||
Drawable icon;
|
Drawable icon;
|
||||||
ApplicationInfo info;
|
ApplicationInfo info;
|
||||||
|
|||||||
@@ -88,7 +88,6 @@
|
|||||||
android:layout_width="0dp"
|
android:layout_width="0dp"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:showDividers=""
|
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<android.support.design.widget.TextInputLayout
|
<android.support.design.widget.TextInputLayout
|
||||||
|
|||||||
Reference in New Issue
Block a user