mirror of
https://github.com/AngelAuraMC/Amethyst-Android.git
synced 2025-09-19 01:27:18 -04:00
Abstracts to BaseLauncherActivity.java for easier maintaining multiple designs
This commit is contained in:
parent
84d8fbacd0
commit
0211102f23
@ -0,0 +1,24 @@
|
|||||||
|
package net.kdt.pojavlaunch;
|
||||||
|
|
||||||
|
import android.support.v7.app.*;
|
||||||
|
import android.widget.*;
|
||||||
|
import net.kdt.pojavlaunch.fragments.*;
|
||||||
|
import net.kdt.pojavlaunch.tasks.*;
|
||||||
|
|
||||||
|
public abstract class BaseLauncherActivity extends AppCompatActivity {
|
||||||
|
public Button mPlayButton;
|
||||||
|
public ConsoleFragment mConsoleView;
|
||||||
|
public CrashFragment mCrashView;
|
||||||
|
public ProgressBar mLaunchProgress;
|
||||||
|
public Spinner mVersionSelector;
|
||||||
|
public TextView mLaunchTextStatus, mTextVersion;
|
||||||
|
|
||||||
|
public JMinecraftVersionList mVersionList;
|
||||||
|
public MinecraftDownloaderTask mTask;
|
||||||
|
public MCProfile.Builder mProfile;
|
||||||
|
public String[] mAvailableVersions;
|
||||||
|
|
||||||
|
public boolean mIsAssetsProcessing = false;
|
||||||
|
|
||||||
|
public abstract void statusIsLaunching(boolean isLaunching);
|
||||||
|
}
|
@ -29,10 +29,11 @@ import android.support.v4.app.Fragment;
|
|||||||
import android.support.v4.app.FragmentManager;
|
import android.support.v4.app.FragmentManager;
|
||||||
import android.app.*;
|
import android.app.*;
|
||||||
import org.apache.commons.io.*;
|
import org.apache.commons.io.*;
|
||||||
|
import net.kdt.pojavlaunch.tasks.*;
|
||||||
//import android.support.v7.view.menu.*;
|
//import android.support.v7.view.menu.*;
|
||||||
//import net.zhuoweizhang.boardwalk.downloader.*;
|
//import net.zhuoweizhang.boardwalk.downloader.*;
|
||||||
|
|
||||||
public class MCLauncherActivity extends AppCompatActivity
|
public class MCLauncherActivity extends BaseLauncherActivity
|
||||||
{
|
{
|
||||||
//private FragmentTabHost mTabHost;
|
//private FragmentTabHost mTabHost;
|
||||||
private LinearLayout fullTab;
|
private LinearLayout fullTab;
|
||||||
@ -44,31 +45,17 @@ public class MCLauncherActivity extends AppCompatActivity
|
|||||||
private ViewPager viewPager;
|
private ViewPager viewPager;
|
||||||
private TabLayout tabLayout;
|
private TabLayout tabLayout;
|
||||||
|
|
||||||
private TextView tvVersion, tvUsernameView;
|
private TextView tvUsernameView;
|
||||||
private Spinner versionSelector;
|
|
||||||
private String[] availableVersions;
|
|
||||||
private MCProfile.Builder profile;
|
|
||||||
private String profilePath = null;
|
private String profilePath = null;
|
||||||
private CrashFragment crashView;
|
|
||||||
private ConsoleFragment consoleView;
|
|
||||||
private ViewPagerAdapter viewPageAdapter;
|
private ViewPagerAdapter viewPageAdapter;
|
||||||
|
|
||||||
private ProgressBar launchProgress;
|
|
||||||
private TextView launchTextStatus;
|
|
||||||
private Button switchUsrBtn, logoutBtn; // MineButtons
|
private Button switchUsrBtn, logoutBtn; // MineButtons
|
||||||
private ViewGroup leftView, rightView;
|
private ViewGroup leftView, rightView;
|
||||||
private Button playButton;
|
|
||||||
|
|
||||||
private Gson gson;
|
|
||||||
|
|
||||||
private JMinecraftVersionList versionList;
|
|
||||||
private static volatile boolean isAssetsProcessing = false;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState)
|
protected void onCreate(Bundle savedInstanceState)
|
||||||
{
|
{
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
gson = new Gson();
|
|
||||||
|
|
||||||
viewInit();
|
viewInit();
|
||||||
|
|
||||||
@ -97,26 +84,26 @@ public class MCLauncherActivity extends AppCompatActivity
|
|||||||
tabLayout = findViewById(R.id.launchermainTabLayout);
|
tabLayout = findViewById(R.id.launchermainTabLayout);
|
||||||
viewPager = findViewById(R.id.launchermainTabPager);
|
viewPager = findViewById(R.id.launchermainTabPager);
|
||||||
|
|
||||||
consoleView = new ConsoleFragment();
|
mConsoleView = new ConsoleFragment();
|
||||||
crashView = new CrashFragment();
|
mCrashView = new CrashFragment();
|
||||||
|
|
||||||
viewPageAdapter = new ViewPagerAdapter(getSupportFragmentManager());
|
viewPageAdapter = new ViewPagerAdapter(getSupportFragmentManager());
|
||||||
|
|
||||||
viewPageAdapter.addFragment(new LauncherFragment(), getStr(R.string.mcl_tab_news));
|
viewPageAdapter.addFragment(new LauncherFragment(), getStr(R.string.mcl_tab_news));
|
||||||
viewPageAdapter.addFragment(consoleView, getStr(R.string.mcl_tab_console));
|
viewPageAdapter.addFragment(mConsoleView, getStr(R.string.mcl_tab_console));
|
||||||
viewPageAdapter.addFragment(crashView, getStr(R.string.mcl_tab_crash));
|
viewPageAdapter.addFragment(mCrashView, getStr(R.string.mcl_tab_crash));
|
||||||
|
|
||||||
viewPager.setAdapter(viewPageAdapter);
|
viewPager.setAdapter(viewPageAdapter);
|
||||||
tabLayout.setupWithViewPager(viewPager);
|
tabLayout.setupWithViewPager(viewPager);
|
||||||
|
|
||||||
tvUsernameView = (TextView) findId(R.id.launcherMainUsernameView);
|
tvUsernameView = (TextView) findId(R.id.launcherMainUsernameView);
|
||||||
tvVersion = (TextView) findId(R.id.launcherMainVersionView);
|
mTextVersion = (TextView) findId(R.id.launcherMainVersionView);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
profilePath = PojavProfile.getCurrentProfilePath(this);
|
profilePath = PojavProfile.getCurrentProfilePath(this);
|
||||||
profile = PojavProfile.getCurrentProfileContent(this);
|
mProfile = PojavProfile.getCurrentProfileContent(this);
|
||||||
|
|
||||||
tvUsernameView.setText(profile.getUsername());
|
tvUsernameView.setText(mProfile.getUsername());
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
//Tools.throwError(this, e);
|
//Tools.throwError(this, e);
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@ -163,103 +150,29 @@ public class MCLauncherActivity extends AppCompatActivity
|
|||||||
versions.add(e.getMessage());
|
versions.add(e.getMessage());
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
availableVersions = versions.toArray(new String[0]);
|
mAvailableVersions = versions.toArray(new String[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
//availableVersions;
|
//availableVersions;
|
||||||
|
|
||||||
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, availableVersions);
|
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, mAvailableVersions);
|
||||||
adapter.setDropDownViewResource(android.R.layout.simple_list_item_single_choice);
|
adapter.setDropDownViewResource(android.R.layout.simple_list_item_single_choice);
|
||||||
versionSelector = (Spinner) findId(R.id.launcherMainSelectVersion);
|
mVersionSelector = (Spinner) findId(R.id.launcherMainSelectVersion);
|
||||||
versionSelector.setAdapter(adapter);
|
mVersionSelector.setAdapter(adapter);
|
||||||
|
|
||||||
launchProgress = (ProgressBar) findId(R.id.progressDownloadBar);
|
mLaunchProgress = (ProgressBar) findId(R.id.progressDownloadBar);
|
||||||
launchTextStatus = (TextView) findId(R.id.progressDownloadText);
|
mLaunchTextStatus = (TextView) findId(R.id.progressDownloadText);
|
||||||
LinearLayout exitLayout = (LinearLayout) findId(R.id.launcherMainExitbtns);
|
LinearLayout exitLayout = (LinearLayout) findId(R.id.launcherMainExitbtns);
|
||||||
switchUsrBtn = (Button) exitLayout.getChildAt(0);
|
switchUsrBtn = (Button) exitLayout.getChildAt(0);
|
||||||
logoutBtn = (Button) exitLayout.getChildAt(1);
|
logoutBtn = (Button) exitLayout.getChildAt(1);
|
||||||
|
|
||||||
leftView = (LinearLayout) findId(R.id.launcherMainLeftLayout);
|
leftView = (LinearLayout) findId(R.id.launcherMainLeftLayout);
|
||||||
playButton = (Button) findId(R.id.launcherMainPlayButton);
|
mPlayButton = (Button) findId(R.id.launcherMainPlayButton);
|
||||||
rightView = (ViewGroup) findId(R.id.launcherMainRightLayout);
|
rightView = (ViewGroup) findId(R.id.launcherMainRightLayout);
|
||||||
|
|
||||||
statusIsLaunching(false);
|
statusIsLaunching(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class RefreshVersionListTask extends AsyncTask<Void, Void, ArrayList<String>>{
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected ArrayList<String> doInBackground(Void[] p1)
|
|
||||||
{
|
|
||||||
try{
|
|
||||||
versionList = gson.fromJson(DownloadUtils.downloadString("https://launchermeta.mojang.com/mc/game/version_manifest.json"), JMinecraftVersionList.class);
|
|
||||||
ArrayList<String> versionStringList = filter(versionList.versions, new File(Tools.versnDir).listFiles());
|
|
||||||
|
|
||||||
return versionStringList;
|
|
||||||
} catch (Exception e){
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPostExecute(ArrayList<String> result)
|
|
||||||
{
|
|
||||||
super.onPostExecute(result);
|
|
||||||
|
|
||||||
final PopupMenu popup = new PopupMenu(MCLauncherActivity.this, versionSelector);
|
|
||||||
popup.getMenuInflater().inflate(R.menu.menu_versionopt, popup.getMenu());
|
|
||||||
|
|
||||||
if(result != null && result.size() > 0) {
|
|
||||||
ArrayAdapter<String> adapter = new ArrayAdapter<String>(MCLauncherActivity.this, android.R.layout.simple_spinner_item, result);
|
|
||||||
adapter.setDropDownViewResource(android.R.layout.simple_list_item_single_choice);
|
|
||||||
versionSelector.setAdapter(adapter);
|
|
||||||
versionSelector.setSelection(selectAt(result.toArray(new String[0]), profile.getVersion()));
|
|
||||||
} else {
|
|
||||||
versionSelector.setSelection(selectAt(availableVersions, profile.getVersion()));
|
|
||||||
}
|
|
||||||
versionSelector.setOnItemSelectedListener(new OnItemSelectedListener(){
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onItemSelected(AdapterView<?> p1, View p2, int p3, long p4)
|
|
||||||
{
|
|
||||||
String version = p1.getItemAtPosition(p3).toString();
|
|
||||||
profile.setVersion(version);
|
|
||||||
|
|
||||||
PojavProfile.setCurrentProfile(MCLauncherActivity.this, profile);
|
|
||||||
if (PojavProfile.isFileType(MCLauncherActivity.this)) {
|
|
||||||
PojavProfile.setCurrentProfile(MCLauncherActivity.this, MCProfile.build(profile));
|
|
||||||
}
|
|
||||||
|
|
||||||
tvVersion.setText(getStr(R.string.mcl_version_msg, version));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onNothingSelected(AdapterView<?> p1)
|
|
||||||
{
|
|
||||||
// TODO: Implement this method
|
|
||||||
}
|
|
||||||
});
|
|
||||||
versionSelector.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener(){
|
|
||||||
@Override
|
|
||||||
public boolean onItemLongClick(AdapterView<?> p1, View p2, int p3, long p4)
|
|
||||||
{
|
|
||||||
// Implement copy, remove, reinstall,...
|
|
||||||
popup.show();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
|
||||||
public boolean onMenuItemClick(MenuItem item) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
tvVersion.setText(getStr(R.string.mcl_version_msg) + versionSelector.getSelectedItem());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPostResume() {
|
protected void onPostResume() {
|
||||||
super.onPostResume();
|
super.onPostResume();
|
||||||
@ -268,50 +181,16 @@ public class MCLauncherActivity extends AppCompatActivity
|
|||||||
|
|
||||||
private float updateWidthHeight() {
|
private float updateWidthHeight() {
|
||||||
float leftRightWidth = (float) CallbackBridge.windowWidth / 100f * 32f;
|
float leftRightWidth = (float) CallbackBridge.windowWidth / 100f * 32f;
|
||||||
float playButtonWidth = CallbackBridge.windowWidth - leftRightWidth * 2f;
|
float mPlayButtonWidth = CallbackBridge.windowWidth - leftRightWidth * 2f;
|
||||||
LinearLayout.LayoutParams leftRightParams = new LinearLayout.LayoutParams((int) leftRightWidth, (int) Tools.dpToPx(this, CallbackBridge.windowHeight / 9));
|
LinearLayout.LayoutParams leftRightParams = new LinearLayout.LayoutParams((int) leftRightWidth, (int) Tools.dpToPx(this, CallbackBridge.windowHeight / 9));
|
||||||
LinearLayout.LayoutParams playButtonParams = new LinearLayout.LayoutParams((int) playButtonWidth, (int) Tools.dpToPx(this, CallbackBridge.windowHeight / 9));
|
LinearLayout.LayoutParams mPlayButtonParams = new LinearLayout.LayoutParams((int) mPlayButtonWidth, (int) Tools.dpToPx(this, CallbackBridge.windowHeight / 9));
|
||||||
leftView.setLayoutParams(leftRightParams);
|
leftView.setLayoutParams(leftRightParams);
|
||||||
rightView.setLayoutParams(leftRightParams);
|
rightView.setLayoutParams(leftRightParams);
|
||||||
playButton.setLayoutParams(playButtonParams);
|
mPlayButton.setLayoutParams(mPlayButtonParams);
|
||||||
|
|
||||||
return leftRightWidth;
|
return leftRightWidth;
|
||||||
}
|
}
|
||||||
|
|
||||||
private JMinecraftVersionList.Version findVersion(String version) {
|
|
||||||
if (versionList != null) {
|
|
||||||
for (JMinecraftVersionList.Version valueVer: versionList.versions) {
|
|
||||||
if (valueVer.id.equals(version)) {
|
|
||||||
return valueVer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Custom version, inherits from base.
|
|
||||||
return Tools.getVersionInfo(version);
|
|
||||||
}
|
|
||||||
|
|
||||||
private ArrayList<String> filter(JMinecraftVersionList.Version[] list1, File[] list2) {
|
|
||||||
ArrayList<String> output = new ArrayList<String>();
|
|
||||||
|
|
||||||
for (JMinecraftVersionList.Version value1: list1) {
|
|
||||||
if ((value1.type.equals("release") && LauncherPreferences.PREF_VERTYPE_RELEASE) ||
|
|
||||||
(value1.type.equals("snapshot") && LauncherPreferences.PREF_VERTYPE_SNAPSHOT) ||
|
|
||||||
(value1.type.equals("old_alpha") && LauncherPreferences.PREF_VERTYPE_OLDALPHA) ||
|
|
||||||
(value1.type.equals("old_beta") && LauncherPreferences.PREF_VERTYPE_OLDBETA)) {
|
|
||||||
output.add(value1.id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (File value2: list2) {
|
|
||||||
if (!output.contains(value2.getName())) {
|
|
||||||
output.add(value2.getName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void mcaccSwitchUser(View view)
|
public void mcaccSwitchUser(View view)
|
||||||
{
|
{
|
||||||
showProfileInfo();
|
showProfileInfo();
|
||||||
@ -349,7 +228,7 @@ public class MCLauncherActivity extends AppCompatActivity
|
|||||||
protected void onResumeFragments()
|
protected void onResumeFragments()
|
||||||
{
|
{
|
||||||
super.onResumeFragments();
|
super.onResumeFragments();
|
||||||
new RefreshVersionListTask().execute();
|
new RefreshVersionListTask(this).execute();
|
||||||
|
|
||||||
try{
|
try{
|
||||||
final ProgressDialog barrier = new ProgressDialog(this);
|
final ProgressDialog barrier = new ProgressDialog(this);
|
||||||
@ -363,7 +242,7 @@ public class MCLauncherActivity extends AppCompatActivity
|
|||||||
@Override
|
@Override
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
while (consoleView == null) {
|
while (mConsoleView == null) {
|
||||||
try {
|
try {
|
||||||
Thread.sleep(20);
|
Thread.sleep(20);
|
||||||
} catch (Throwable th) {}
|
} catch (Throwable th) {}
|
||||||
@ -378,7 +257,7 @@ public class MCLauncherActivity extends AppCompatActivity
|
|||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
consoleView.putLog("");
|
mConsoleView.putLog("");
|
||||||
barrier.dismiss();
|
barrier.dismiss();
|
||||||
} catch (Throwable th) {
|
} catch (Throwable th) {
|
||||||
startActivity(getIntent());
|
startActivity(getIntent());
|
||||||
@ -390,8 +269,8 @@ public class MCLauncherActivity extends AppCompatActivity
|
|||||||
}).start();
|
}).start();
|
||||||
|
|
||||||
File lastCrashFile = Tools.lastFileModified(Tools.crashPath);
|
File lastCrashFile = Tools.lastFileModified(Tools.crashPath);
|
||||||
if(CrashFragment.isNewCrash(lastCrashFile) || !crashView.getLastCrash().isEmpty()){
|
if(CrashFragment.isNewCrash(lastCrashFile) || !mCrashView.getLastCrash().isEmpty()){
|
||||||
crashView.resetCrashLog = false;
|
mCrashView.resetCrashLog = false;
|
||||||
selectTabPage(2);
|
selectTabPage(2);
|
||||||
} else throw new Exception();
|
} else throw new Exception();
|
||||||
} catch(Throwable e){
|
} catch(Throwable e){
|
||||||
@ -399,20 +278,6 @@ public class MCLauncherActivity extends AppCompatActivity
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public int selectAt(String[] strArr, String select)
|
|
||||||
{
|
|
||||||
int count = 0;
|
|
||||||
for(String str : strArr){
|
|
||||||
if(str.equals(select)){
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onResume(){
|
protected void onResume(){
|
||||||
super.onResume();
|
super.onResume();
|
||||||
@ -422,19 +287,19 @@ public class MCLauncherActivity extends AppCompatActivity
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean canBack = false;
|
private boolean canBack = false;
|
||||||
private void statusIsLaunching(boolean isLaunching)
|
public void statusIsLaunching(boolean isLaunching)
|
||||||
{
|
{
|
||||||
LinearLayout.LayoutParams reparam = new LinearLayout.LayoutParams((int) updateWidthHeight(), LinearLayout.LayoutParams.WRAP_CONTENT);
|
LinearLayout.LayoutParams reparam = new LinearLayout.LayoutParams((int) updateWidthHeight(), LinearLayout.LayoutParams.WRAP_CONTENT);
|
||||||
ViewGroup.MarginLayoutParams lmainTabParam = (ViewGroup.MarginLayoutParams) fullTab.getLayoutParams();
|
ViewGroup.MarginLayoutParams lmainTabParam = (ViewGroup.MarginLayoutParams) fullTab.getLayoutParams();
|
||||||
int launchVisibility = isLaunching ? View.VISIBLE : View.GONE;
|
int launchVisibility = isLaunching ? View.VISIBLE : View.GONE;
|
||||||
launchProgress.setVisibility(launchVisibility);
|
mLaunchProgress.setVisibility(launchVisibility);
|
||||||
launchTextStatus.setVisibility(launchVisibility);
|
mLaunchTextStatus.setVisibility(launchVisibility);
|
||||||
lmainTabParam.bottomMargin = reparam.height;
|
lmainTabParam.bottomMargin = reparam.height;
|
||||||
leftView.setLayoutParams(reparam);
|
leftView.setLayoutParams(reparam);
|
||||||
|
|
||||||
switchUsrBtn.setEnabled(!isLaunching);
|
switchUsrBtn.setEnabled(!isLaunching);
|
||||||
logoutBtn.setEnabled(!isLaunching);
|
logoutBtn.setEnabled(!isLaunching);
|
||||||
versionSelector.setEnabled(!isLaunching);
|
mVersionSelector.setEnabled(!isLaunching);
|
||||||
canBack = !isLaunching;
|
canBack = !isLaunching;
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
@ -451,301 +316,20 @@ public class MCLauncherActivity extends AppCompatActivity
|
|||||||
return super.onTouchEvent(event);
|
return super.onTouchEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
private GameRunnerTask mTask;
|
|
||||||
|
|
||||||
public void launchGame(View v)
|
public void launchGame(View v)
|
||||||
{
|
{
|
||||||
if (!canBack && isAssetsProcessing) {
|
if (!canBack && mIsAssetsProcessing) {
|
||||||
isAssetsProcessing = false;
|
mIsAssetsProcessing = false;
|
||||||
statusIsLaunching(false);
|
statusIsLaunching(false);
|
||||||
} else if (canBack) {
|
} else if (canBack) {
|
||||||
v.setEnabled(false);
|
v.setEnabled(false);
|
||||||
mTask = new GameRunnerTask();
|
mTask = new MinecraftDownloaderTask(this);
|
||||||
mTask.execute(profile.getVersion());
|
mTask.execute(mProfile.getVersion());
|
||||||
crashView.resetCrashLog = true;
|
mCrashView.resetCrashLog = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class GameRunnerTask extends AsyncTask<String, String, Throwable>
|
|
||||||
{
|
|
||||||
private boolean launchWithError = false;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPreExecute() {
|
|
||||||
launchProgress.setMax(1);
|
|
||||||
statusIsLaunching(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
private JMinecraftVersionList.Version verInfo;
|
|
||||||
@Override
|
|
||||||
protected Throwable doInBackground(final String[] p1) {
|
|
||||||
Throwable throwable = null;
|
|
||||||
try {
|
|
||||||
final String downVName = "/" + p1[0] + "/" + p1[0];
|
|
||||||
|
|
||||||
//Downloading libraries
|
|
||||||
String minecraftMainJar = Tools.versnDir + downVName + ".jar";
|
|
||||||
JAssets assets = null;
|
|
||||||
try {
|
|
||||||
//com.pojavdx.dx.mod.Main.debug = true;
|
|
||||||
|
|
||||||
String verJsonDir = Tools.versnDir + downVName + ".json";
|
|
||||||
|
|
||||||
verInfo = findVersion(p1[0]);
|
|
||||||
|
|
||||||
if (verInfo.url != null && !new File(verJsonDir).exists()) {
|
|
||||||
publishProgress("1", "Downloading " + p1[0] + " configuration...");
|
|
||||||
Tools.downloadFile(
|
|
||||||
verInfo.url,
|
|
||||||
verJsonDir
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
verInfo = Tools.getVersionInfo(p1[0]);
|
|
||||||
assets = downloadIndex(verInfo.assets, new File(Tools.ASSETS_PATH, "indexes/" + verInfo.assets + ".json"));
|
|
||||||
|
|
||||||
File outLib;
|
|
||||||
String libPathURL;
|
|
||||||
|
|
||||||
setMax(verInfo.libraries.length + 4 + assets.objects.size());
|
|
||||||
for (final DependentLibrary libItem : verInfo.libraries) {
|
|
||||||
|
|
||||||
if (// libItem.name.startsWith("com.google.code.gson:gson") ||
|
|
||||||
// libItem.name.startsWith("com.mojang:realms") ||
|
|
||||||
libItem.name.startsWith("net.java.jinput") ||
|
|
||||||
// libItem.name.startsWith("net.minecraft.launchwrapper") ||
|
|
||||||
|
|
||||||
// FIXME lib below!
|
|
||||||
// libItem.name.startsWith("optifine:launchwrapper-of") ||
|
|
||||||
|
|
||||||
// libItem.name.startsWith("org.lwjgl.lwjgl:lwjgl") ||
|
|
||||||
libItem.name.startsWith("org.lwjgl")
|
|
||||||
// libItem.name.startsWith("tv.twitch")
|
|
||||||
) { // Black list
|
|
||||||
publishProgress("1", "Ignored " + libItem.name);
|
|
||||||
//Thread.sleep(100);
|
|
||||||
} else {
|
|
||||||
|
|
||||||
String[] libInfo = libItem.name.split(":");
|
|
||||||
String libArtifact = Tools.artifactToPath(libInfo[0], libInfo[1], libInfo[2]);
|
|
||||||
outLib = new File(Tools.libraries + "/" + libArtifact);
|
|
||||||
outLib.getParentFile().mkdirs();
|
|
||||||
|
|
||||||
if (!outLib.exists()) {
|
|
||||||
publishProgress("1", getString(R.string.mcl_launch_download_lib, libItem.name));
|
|
||||||
|
|
||||||
boolean skipIfFailed = false;
|
|
||||||
|
|
||||||
if (libItem.downloads == null || libItem.downloads.artifact == null) {
|
|
||||||
MinecraftLibraryArtifact artifact = new MinecraftLibraryArtifact();
|
|
||||||
artifact.url = (libItem.url == null ? "https://libraries.minecraft.net/" : libItem.url) + libArtifact;
|
|
||||||
libItem.downloads = new DependentLibrary.LibraryDownloads(artifact);
|
|
||||||
|
|
||||||
skipIfFailed = true;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
libPathURL = libItem.downloads.artifact.url;
|
|
||||||
Tools.downloadFile(
|
|
||||||
libPathURL,
|
|
||||||
outLib.getAbsolutePath()
|
|
||||||
);
|
|
||||||
} catch (Throwable th) {
|
|
||||||
if (!skipIfFailed) {
|
|
||||||
throw th;
|
|
||||||
} else {
|
|
||||||
th.printStackTrace();
|
|
||||||
publishProgress("0", th.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
publishProgress("1", getString(R.string.mcl_launch_download_client, p1[0]));
|
|
||||||
File minecraftMainFile = new File(minecraftMainJar);
|
|
||||||
if (!minecraftMainFile.exists() || minecraftMainFile.length() == 0l) {
|
|
||||||
try {
|
|
||||||
Tools.downloadFile(
|
|
||||||
verInfo.downloads.values().toArray(new MinecraftClientInfo[0])[0].url,
|
|
||||||
minecraftMainJar
|
|
||||||
);
|
|
||||||
} catch (Throwable th) {
|
|
||||||
if (verInfo.inheritsFrom != null) {
|
|
||||||
minecraftMainFile.delete();
|
|
||||||
IOUtils.copy(new FileInputStream(new File(Tools.versnDir, verInfo.inheritsFrom + "/" + verInfo.inheritsFrom + ".jar")), new FileOutputStream(minecraftMainFile));
|
|
||||||
} else {
|
|
||||||
throw th;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (Throwable e) {
|
|
||||||
launchWithError = true;
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
|
|
||||||
publishProgress("1", getString(R.string.mcl_launch_cleancache));
|
|
||||||
// new File(inputPath).delete();
|
|
||||||
|
|
||||||
for (File f : new File(Tools.versnDir).listFiles()) {
|
|
||||||
if(f.getName().endsWith(".part")) {
|
|
||||||
Log.d(Tools.APP_NAME, "Cleaning cache: " + f);
|
|
||||||
f.delete();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
isAssetsProcessing = true;
|
|
||||||
playButton.post(new Runnable(){
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
playButton.setText("Skip");
|
|
||||||
playButton.setEnabled(true);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
publishProgress("1", getString(R.string.mcl_launch_download_assets));
|
|
||||||
try {
|
|
||||||
downloadAssets(assets, verInfo.assets, new File(Tools.ASSETS_PATH));
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
|
|
||||||
// Ignore it
|
|
||||||
launchWithError = false;
|
|
||||||
} finally {
|
|
||||||
isAssetsProcessing = false;
|
|
||||||
}
|
|
||||||
} catch (Throwable th){
|
|
||||||
throwable = th;
|
|
||||||
} finally {
|
|
||||||
return throwable;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
private int addProgress = 0; // 34
|
|
||||||
|
|
||||||
public void zeroProgress()
|
|
||||||
{
|
|
||||||
addProgress = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMax(final int value)
|
|
||||||
{
|
|
||||||
launchProgress.post(new Runnable(){
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
launchProgress.setMax(value);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onProgressUpdate(String... p1)
|
|
||||||
{
|
|
||||||
int addedProg = Integer.parseInt(p1[0]);
|
|
||||||
if (addedProg != -1) {
|
|
||||||
addProgress = addProgress + addedProg;
|
|
||||||
launchProgress.setProgress(addProgress);
|
|
||||||
|
|
||||||
launchTextStatus.setText(p1[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (p1.length < 3) consoleView.putLog(p1[1] + (p1.length < 3 ? "\n" : ""));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPostExecute(Throwable p1)
|
|
||||||
{
|
|
||||||
playButton.setText("Play");
|
|
||||||
playButton.setEnabled(true);
|
|
||||||
launchProgress.setMax(100);
|
|
||||||
launchProgress.setProgress(0);
|
|
||||||
statusIsLaunching(false);
|
|
||||||
if(p1 != null) {
|
|
||||||
p1.printStackTrace();
|
|
||||||
Tools.showError(MCLauncherActivity.this, p1);
|
|
||||||
}
|
|
||||||
if(!launchWithError) {
|
|
||||||
crashView.setLastCrash("");
|
|
||||||
|
|
||||||
try {
|
|
||||||
/*
|
|
||||||
List<String> jvmArgs = ManagementFactory.getRuntimeMXBean().getInputArguments();
|
|
||||||
jvmArgs.add("-Xms128M");
|
|
||||||
jvmArgs.add("-Xmx1G");
|
|
||||||
*/
|
|
||||||
Intent mainIntent = new Intent(MCLauncherActivity.this, MainActivity.class);
|
|
||||||
// mainIntent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT);
|
|
||||||
mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
|
|
||||||
mainIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
|
|
||||||
if (LauncherPreferences.PREF_FREEFORM) {
|
|
||||||
DisplayMetrics dm = new DisplayMetrics();
|
|
||||||
getWindowManager().getDefaultDisplay().getMetrics(dm);
|
|
||||||
|
|
||||||
ActivityOptions options = (ActivityOptions) ActivityOptions.class.getMethod("makeBasic").invoke(null);
|
|
||||||
Rect freeformRect = new Rect(0, 0, dm.widthPixels / 2, dm.heightPixels / 2);
|
|
||||||
options.getClass().getDeclaredMethod("setLaunchBounds", Rect.class).invoke(options, freeformRect);
|
|
||||||
startActivity(mainIntent, options.toBundle());
|
|
||||||
} else {
|
|
||||||
startActivity(mainIntent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Throwable e) {
|
|
||||||
Tools.showError(MCLauncherActivity.this, e);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
FloatingIntent maini = new FloatingIntent(PojavLauncherActivity.this, MainActivity.class);
|
|
||||||
maini.startFloatingActivity();
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
mTask = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static final String MINECRAFT_RES = "http://resources.download.minecraft.net/";
|
|
||||||
|
|
||||||
public JAssets downloadIndex(String versionName, File output) throws Throwable {
|
|
||||||
if (!output.exists()) {
|
|
||||||
output.getParentFile().mkdirs();
|
|
||||||
DownloadUtils.downloadFile(verInfo.assetIndex != null ? verInfo.assetIndex.url : "http://s3.amazonaws.com/Minecraft.Download/indexes/" + versionName + ".json", output);
|
|
||||||
}
|
|
||||||
|
|
||||||
return gson.fromJson(Tools.read(output.getAbsolutePath()), JAssets.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void downloadAsset(JAssetInfo asset, File objectsDir) throws IOException, Throwable {
|
|
||||||
String assetPath = asset.hash.substring(0, 2) + "/" + asset.hash;
|
|
||||||
File outFile = new File(objectsDir, assetPath);
|
|
||||||
if (!outFile.exists()) {
|
|
||||||
DownloadUtils.downloadFile(MINECRAFT_RES + assetPath, outFile);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void downloadAssets(JAssets assets, String assetsVersion, File outputDir) throws IOException, Throwable {
|
|
||||||
File hasDownloadedFile = new File(outputDir, "downloaded/" + assetsVersion + ".downloaded");
|
|
||||||
if (!hasDownloadedFile.exists()) {
|
|
||||||
System.out.println("Assets begin time: " + System.currentTimeMillis());
|
|
||||||
Map<String, JAssetInfo> assetsObjects = assets.objects;
|
|
||||||
launchProgress.setMax(assetsObjects.size());
|
|
||||||
zeroProgress();
|
|
||||||
File objectsDir = new File(outputDir, "objects");
|
|
||||||
int downloadedSs = 0;
|
|
||||||
for (JAssetInfo asset : assetsObjects.values()) {
|
|
||||||
if (!isAssetsProcessing) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
downloadAsset(asset, objectsDir);
|
|
||||||
publishProgress("1", getString(R.string.mcl_launch_downloading, assetsObjects.keySet().toArray(new String[0])[downloadedSs]));
|
|
||||||
downloadedSs++;
|
|
||||||
}
|
|
||||||
hasDownloadedFile.getParentFile().mkdirs();
|
|
||||||
hasDownloadedFile.createNewFile();
|
|
||||||
System.out.println("Assets end time: " + System.currentTimeMillis());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public View findId(int id)
|
public View findId(int id)
|
||||||
{
|
{
|
||||||
|
@ -27,10 +27,11 @@ import org.apache.commons.io.*;
|
|||||||
import org.lwjgl.glfw.*;
|
import org.lwjgl.glfw.*;
|
||||||
|
|
||||||
import android.support.v7.app.AlertDialog;
|
import android.support.v7.app.AlertDialog;
|
||||||
|
import net.kdt.pojavlaunch.tasks.*;
|
||||||
//import android.support.v7.view.menu.*;
|
//import android.support.v7.view.menu.*;
|
||||||
//import net.zhuoweizhang.boardwalk.downloader.*;
|
//import net.zhuoweizhang.boardwalk.downloader.*;
|
||||||
|
|
||||||
public class PojavLauncherActivity extends AppCompatActivity
|
public class PojavLauncherActivity extends BaseLauncherActivity
|
||||||
{
|
{
|
||||||
//private FragmentTabHost mTabHost;
|
//private FragmentTabHost mTabHost;
|
||||||
private LinearLayout fullTab, leftTab;
|
private LinearLayout fullTab, leftTab;
|
||||||
@ -42,38 +43,26 @@ public class PojavLauncherActivity extends AppCompatActivity
|
|||||||
private ViewPager viewPager;
|
private ViewPager viewPager;
|
||||||
private VerticalTabLayout tabLayout;
|
private VerticalTabLayout tabLayout;
|
||||||
|
|
||||||
private TextView tvVersion, tvUsernameView;
|
private TextView tvUsernameView;
|
||||||
private Spinner accountSelector, versionSelector;
|
private Spinner accountSelector;
|
||||||
private String[] availableVersions;
|
|
||||||
private MCProfile.Builder profile;
|
|
||||||
private String profilePath = null;
|
private String profilePath = null;
|
||||||
private CrashFragment crashView;
|
|
||||||
private ConsoleFragment consoleView;
|
|
||||||
private ViewPagerAdapter viewPageAdapter;
|
private ViewPagerAdapter viewPageAdapter;
|
||||||
|
|
||||||
private ProgressBar launchProgress;
|
|
||||||
private TextView launchTextStatus;
|
|
||||||
private Button switchUsrBtn, logoutBtn; // MineButtons
|
private Button switchUsrBtn, logoutBtn; // MineButtons
|
||||||
private ViewGroup leftView, rightView;
|
private ViewGroup leftView, rightView;
|
||||||
private Button playButton;
|
|
||||||
|
|
||||||
private Gson gson;
|
|
||||||
|
|
||||||
private JMinecraftVersionList versionList;
|
|
||||||
private static volatile boolean isAssetsProcessing = false;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState)
|
protected void onCreate(Bundle savedInstanceState)
|
||||||
{
|
{
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
gson = new Gson();
|
|
||||||
|
|
||||||
viewInit();
|
viewInit();
|
||||||
|
|
||||||
Tools.setFullscreen(this);
|
Tools.setFullscreen(this);
|
||||||
|
|
||||||
if (BuildConfig.DEBUG)
|
if (BuildConfig.DEBUG) {
|
||||||
Toast.makeText(this, "Launcher process id: " + android.os.Process.myPid(), Toast.LENGTH_LONG).show();
|
Toast.makeText(this, "Launcher process id: " + android.os.Process.myPid(), Toast.LENGTH_LONG).show();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// DEBUG
|
// DEBUG
|
||||||
//new android.support.design.widget.NavigationView(this);
|
//new android.support.design.widget.NavigationView(this);
|
||||||
@ -91,13 +80,13 @@ public class PojavLauncherActivity extends AppCompatActivity
|
|||||||
tabLayout = findViewById(R.id.launchermainTabLayout);
|
tabLayout = findViewById(R.id.launchermainTabLayout);
|
||||||
viewPager = findViewById(R.id.launchermainTabPager);
|
viewPager = findViewById(R.id.launchermainTabPager);
|
||||||
|
|
||||||
consoleView = new ConsoleFragment();
|
mConsoleView = new ConsoleFragment();
|
||||||
crashView = new CrashFragment();
|
mCrashView = new CrashFragment();
|
||||||
|
|
||||||
viewPageAdapter = new ViewPagerAdapter(getSupportFragmentManager());
|
viewPageAdapter = new ViewPagerAdapter(getSupportFragmentManager());
|
||||||
viewPageAdapter.addFragment(new LauncherFragment(), R.drawable.ic_menu_news, getString(R.string.mcl_tab_news));
|
viewPageAdapter.addFragment(new LauncherFragment(), R.drawable.ic_menu_news, getString(R.string.mcl_tab_news));
|
||||||
viewPageAdapter.addFragment(consoleView, R.drawable.ic_menu_java, getString(R.string.mcl_tab_console));
|
viewPageAdapter.addFragment(mConsoleView, R.drawable.ic_menu_java, getString(R.string.mcl_tab_console));
|
||||||
viewPageAdapter.addFragment(crashView, 0, getString(R.string.mcl_tab_crash));
|
viewPageAdapter.addFragment(mCrashView, 0, getString(R.string.mcl_tab_crash));
|
||||||
viewPageAdapter.addFragment(new LauncherPreferenceFragment(), R.drawable.ic_menu_settings, getString(R.string.mcl_option_settings));
|
viewPageAdapter.addFragment(new LauncherPreferenceFragment(), R.drawable.ic_menu_settings, getString(R.string.mcl_option_settings));
|
||||||
|
|
||||||
viewPager.setAdapter(viewPageAdapter);
|
viewPager.setAdapter(viewPageAdapter);
|
||||||
@ -106,13 +95,13 @@ public class PojavLauncherActivity extends AppCompatActivity
|
|||||||
tabLayout.setLastTabAsBottom();
|
tabLayout.setLastTabAsBottom();
|
||||||
|
|
||||||
tvUsernameView = (TextView) findViewById(R.id.launcherMainUsernameView);
|
tvUsernameView = (TextView) findViewById(R.id.launcherMainUsernameView);
|
||||||
tvVersion = (TextView) findViewById(R.id.launcherMainVersionView);
|
mTextVersion = (TextView) findViewById(R.id.launcherMainVersionView);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
profilePath = PojavProfile.getCurrentProfilePath(this);
|
profilePath = PojavProfile.getCurrentProfilePath(this);
|
||||||
profile = PojavProfile.getCurrentProfileContent(this);
|
mProfile = PojavProfile.getCurrentProfileContent(this);
|
||||||
|
|
||||||
tvUsernameView.setText(profile.getUsername());
|
tvUsernameView.setText(mProfile.getUsername());
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
//Tools.throwError(this, e);
|
//Tools.throwError(this, e);
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@ -178,103 +167,29 @@ public class PojavLauncherActivity extends AppCompatActivity
|
|||||||
versions.add(e.getMessage());
|
versions.add(e.getMessage());
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
availableVersions = versions.toArray(new String[0]);
|
mAvailableVersions = versions.toArray(new String[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
//availableVersions;
|
//mAvailableVersions;
|
||||||
|
|
||||||
ArrayAdapter<String> adapterVer = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, availableVersions);
|
ArrayAdapter<String> adapterVer = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, mAvailableVersions);
|
||||||
adapterVer.setDropDownViewResource(android.R.layout.simple_list_item_single_choice);
|
adapterVer.setDropDownViewResource(android.R.layout.simple_list_item_single_choice);
|
||||||
versionSelector = (Spinner) findViewById(R.id.launchermain_spinner_version);
|
mVersionSelector = (Spinner) findViewById(R.id.launchermain_spinner_version);
|
||||||
versionSelector.setAdapter(adapterVer);
|
mVersionSelector.setAdapter(adapterVer);
|
||||||
|
|
||||||
launchProgress = (ProgressBar) findViewById(R.id.progressDownloadBar);
|
mLaunchProgress = (ProgressBar) findViewById(R.id.progressDownloadBar);
|
||||||
launchTextStatus = (TextView) findViewById(R.id.progressDownloadText);
|
mLaunchTextStatus = (TextView) findViewById(R.id.progressDownloadText);
|
||||||
LinearLayout exitLayout = (LinearLayout) findViewById(R.id.launcherMainExitbtns);
|
LinearLayout exitLayout = (LinearLayout) findViewById(R.id.launcherMainExitbtns);
|
||||||
switchUsrBtn = (Button) exitLayout.getChildAt(0);
|
switchUsrBtn = (Button) exitLayout.getChildAt(0);
|
||||||
logoutBtn = (Button) exitLayout.getChildAt(1);
|
logoutBtn = (Button) exitLayout.getChildAt(1);
|
||||||
|
|
||||||
leftView = (LinearLayout) findViewById(R.id.launcherMainLeftLayout);
|
leftView = (LinearLayout) findViewById(R.id.launcherMainLeftLayout);
|
||||||
playButton = (Button) findViewById(R.id.launcherMainPlayButton);
|
mPlayButton = (Button) findViewById(R.id.launcherMainPlayButton);
|
||||||
rightView = (ViewGroup) findViewById(R.id.launcherMainRightLayout);
|
rightView = (ViewGroup) findViewById(R.id.launcherMainRightLayout);
|
||||||
|
|
||||||
statusIsLaunching(false);
|
statusIsLaunching(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class RefreshVersionListTask extends AsyncTask<Void, Void, ArrayList<String>>{
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected ArrayList<String> doInBackground(Void[] p1)
|
|
||||||
{
|
|
||||||
try{
|
|
||||||
versionList = gson.fromJson(DownloadUtils.downloadString("https://launchermeta.mojang.com/mc/game/version_manifest.json"), JMinecraftVersionList.class);
|
|
||||||
ArrayList<String> versionStringList = filter(versionList.versions, new File(Tools.versnDir).listFiles());
|
|
||||||
|
|
||||||
return versionStringList;
|
|
||||||
} catch (Exception e){
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPostExecute(ArrayList<String> result)
|
|
||||||
{
|
|
||||||
super.onPostExecute(result);
|
|
||||||
|
|
||||||
final PopupMenu popup = new PopupMenu(PojavLauncherActivity.this, versionSelector);
|
|
||||||
popup.getMenuInflater().inflate(R.menu.menu_versionopt, popup.getMenu());
|
|
||||||
|
|
||||||
if(result != null && result.size() > 0) {
|
|
||||||
ArrayAdapter<String> adapter = new ArrayAdapter<String>(PojavLauncherActivity.this, android.R.layout.simple_spinner_item, result);
|
|
||||||
adapter.setDropDownViewResource(android.R.layout.simple_list_item_single_choice);
|
|
||||||
versionSelector.setAdapter(adapter);
|
|
||||||
versionSelector.setSelection(selectAt(result.toArray(new String[0]), profile.getVersion()));
|
|
||||||
} else {
|
|
||||||
versionSelector.setSelection(selectAt(availableVersions, profile.getVersion()));
|
|
||||||
}
|
|
||||||
versionSelector.setOnItemSelectedListener(new OnItemSelectedListener(){
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onItemSelected(AdapterView<?> p1, View p2, int p3, long p4)
|
|
||||||
{
|
|
||||||
String version = p1.getItemAtPosition(p3).toString();
|
|
||||||
profile.setVersion(version);
|
|
||||||
|
|
||||||
PojavProfile.setCurrentProfile(PojavLauncherActivity.this, profile);
|
|
||||||
if (PojavProfile.isFileType(PojavLauncherActivity.this)) {
|
|
||||||
PojavProfile.setCurrentProfile(PojavLauncherActivity.this, MCProfile.build(profile));
|
|
||||||
}
|
|
||||||
|
|
||||||
tvVersion.setText(getString(R.string.mcl_version_msg, version));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onNothingSelected(AdapterView<?> p1)
|
|
||||||
{
|
|
||||||
// TODO: Implement this method
|
|
||||||
}
|
|
||||||
});
|
|
||||||
versionSelector.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener(){
|
|
||||||
@Override
|
|
||||||
public boolean onItemLongClick(AdapterView<?> p1, View p2, int p3, long p4)
|
|
||||||
{
|
|
||||||
// Implement copy, remove, reinstall,...
|
|
||||||
popup.show();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
|
||||||
public boolean onMenuItemClick(MenuItem item) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
tvVersion.setText(getString(R.string.mcl_version_msg) + versionSelector.getSelectedItem());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPostResume() {
|
protected void onPostResume() {
|
||||||
super.onPostResume();
|
super.onPostResume();
|
||||||
@ -283,50 +198,16 @@ public class PojavLauncherActivity extends AppCompatActivity
|
|||||||
|
|
||||||
private float updateWidthHeight() {
|
private float updateWidthHeight() {
|
||||||
float leftRightWidth = (float) CallbackBridge.windowWidth / 100f * 32f;
|
float leftRightWidth = (float) CallbackBridge.windowWidth / 100f * 32f;
|
||||||
float playButtonWidth = CallbackBridge.windowWidth - leftRightWidth * 2f;
|
float mPlayButtonWidth = CallbackBridge.windowWidth - leftRightWidth * 2f;
|
||||||
LinearLayout.LayoutParams leftRightParams = new LinearLayout.LayoutParams((int) leftRightWidth, (int) Tools.dpToPx(this, CallbackBridge.windowHeight / 9));
|
LinearLayout.LayoutParams leftRightParams = new LinearLayout.LayoutParams((int) leftRightWidth, (int) Tools.dpToPx(this, CallbackBridge.windowHeight / 9));
|
||||||
LinearLayout.LayoutParams playButtonParams = new LinearLayout.LayoutParams((int) playButtonWidth, (int) Tools.dpToPx(this, CallbackBridge.windowHeight / 9));
|
LinearLayout.LayoutParams mPlayButtonParams = new LinearLayout.LayoutParams((int) mPlayButtonWidth, (int) Tools.dpToPx(this, CallbackBridge.windowHeight / 9));
|
||||||
leftView.setLayoutParams(leftRightParams);
|
leftView.setLayoutParams(leftRightParams);
|
||||||
rightView.setLayoutParams(leftRightParams);
|
rightView.setLayoutParams(leftRightParams);
|
||||||
playButton.setLayoutParams(playButtonParams);
|
mPlayButton.setLayoutParams(mPlayButtonParams);
|
||||||
|
|
||||||
return leftRightWidth;
|
return leftRightWidth;
|
||||||
}
|
}
|
||||||
|
|
||||||
private JMinecraftVersionList.Version findVersion(String version) {
|
|
||||||
if (versionList != null) {
|
|
||||||
for (JMinecraftVersionList.Version valueVer: versionList.versions) {
|
|
||||||
if (valueVer.id.equals(version)) {
|
|
||||||
return valueVer;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Custom version, inherits from base.
|
|
||||||
return Tools.getVersionInfo(version);
|
|
||||||
}
|
|
||||||
|
|
||||||
private ArrayList<String> filter(JMinecraftVersionList.Version[] list1, File[] list2) {
|
|
||||||
ArrayList<String> output = new ArrayList<String>();
|
|
||||||
|
|
||||||
for (JMinecraftVersionList.Version value1: list1) {
|
|
||||||
if ((value1.type.equals("release") && LauncherPreferences.PREF_VERTYPE_RELEASE) ||
|
|
||||||
(value1.type.equals("snapshot") && LauncherPreferences.PREF_VERTYPE_SNAPSHOT) ||
|
|
||||||
(value1.type.equals("old_alpha") && LauncherPreferences.PREF_VERTYPE_OLDALPHA) ||
|
|
||||||
(value1.type.equals("old_beta") && LauncherPreferences.PREF_VERTYPE_OLDBETA)) {
|
|
||||||
output.add(value1.id);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (File value2: list2) {
|
|
||||||
if (!output.contains(value2.getName())) {
|
|
||||||
output.add(value2.getName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void mcaccSwitchUser(View view)
|
public void mcaccSwitchUser(View view)
|
||||||
{
|
{
|
||||||
showProfileInfo();
|
showProfileInfo();
|
||||||
@ -364,7 +245,7 @@ public class PojavLauncherActivity extends AppCompatActivity
|
|||||||
protected void onResumeFragments()
|
protected void onResumeFragments()
|
||||||
{
|
{
|
||||||
super.onResumeFragments();
|
super.onResumeFragments();
|
||||||
new RefreshVersionListTask().execute();
|
new RefreshVersionListTask(this).execute();
|
||||||
|
|
||||||
try{
|
try{
|
||||||
final ProgressDialog barrier = new ProgressDialog(this);
|
final ProgressDialog barrier = new ProgressDialog(this);
|
||||||
@ -378,7 +259,7 @@ public class PojavLauncherActivity extends AppCompatActivity
|
|||||||
@Override
|
@Override
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
while (consoleView == null) {
|
while (mConsoleView == null) {
|
||||||
try {
|
try {
|
||||||
Thread.sleep(20);
|
Thread.sleep(20);
|
||||||
} catch (Throwable th) {}
|
} catch (Throwable th) {}
|
||||||
@ -393,7 +274,7 @@ public class PojavLauncherActivity extends AppCompatActivity
|
|||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
consoleView.putLog("");
|
mConsoleView.putLog("");
|
||||||
barrier.dismiss();
|
barrier.dismiss();
|
||||||
} catch (Throwable th) {
|
} catch (Throwable th) {
|
||||||
startActivity(getIntent());
|
startActivity(getIntent());
|
||||||
@ -405,8 +286,8 @@ public class PojavLauncherActivity extends AppCompatActivity
|
|||||||
}).start();
|
}).start();
|
||||||
|
|
||||||
File lastCrashFile = Tools.lastFileModified(Tools.crashPath);
|
File lastCrashFile = Tools.lastFileModified(Tools.crashPath);
|
||||||
if(CrashFragment.isNewCrash(lastCrashFile) || !crashView.getLastCrash().isEmpty()){
|
if(CrashFragment.isNewCrash(lastCrashFile) || !mCrashView.getLastCrash().isEmpty()){
|
||||||
crashView.resetCrashLog = false;
|
mCrashView.resetCrashLog = false;
|
||||||
selectTabPage(2);
|
selectTabPage(2);
|
||||||
} else throw new Exception();
|
} else throw new Exception();
|
||||||
} catch(Throwable e){
|
} catch(Throwable e){
|
||||||
@ -414,20 +295,6 @@ public class PojavLauncherActivity extends AppCompatActivity
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public int selectAt(String[] strArr, String select)
|
|
||||||
{
|
|
||||||
int count = 0;
|
|
||||||
for(String str : strArr){
|
|
||||||
if(str.equals(select)){
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
count++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onResume(){
|
protected void onResume(){
|
||||||
super.onResume();
|
super.onResume();
|
||||||
@ -437,21 +304,21 @@ public class PojavLauncherActivity extends AppCompatActivity
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean canBack = false;
|
private boolean canBack = false;
|
||||||
private void statusIsLaunching(boolean isLaunching) {
|
public void statusIsLaunching(boolean isLaunching) {
|
||||||
// As preference fragment put to tab, changes without notice, so need re-load pref
|
// As preference fragment put to tab, changes without notice, so need re-load pref
|
||||||
if (isLaunching) LauncherPreferences.loadPreferences();
|
if (isLaunching) LauncherPreferences.loadPreferences();
|
||||||
|
|
||||||
LinearLayout.LayoutParams reparam = new LinearLayout.LayoutParams((int) updateWidthHeight(), LinearLayout.LayoutParams.WRAP_CONTENT);
|
LinearLayout.LayoutParams reparam = new LinearLayout.LayoutParams((int) updateWidthHeight(), LinearLayout.LayoutParams.WRAP_CONTENT);
|
||||||
ViewGroup.MarginLayoutParams lmainTabParam = (ViewGroup.MarginLayoutParams) fullTab.getLayoutParams();
|
ViewGroup.MarginLayoutParams lmainTabParam = (ViewGroup.MarginLayoutParams) fullTab.getLayoutParams();
|
||||||
int launchVisibility = isLaunching ? View.VISIBLE : View.GONE;
|
int launchVisibility = isLaunching ? View.VISIBLE : View.GONE;
|
||||||
launchProgress.setVisibility(launchVisibility);
|
mLaunchProgress.setVisibility(launchVisibility);
|
||||||
launchTextStatus.setVisibility(launchVisibility);
|
mLaunchTextStatus.setVisibility(launchVisibility);
|
||||||
lmainTabParam.bottomMargin = reparam.height;
|
lmainTabParam.bottomMargin = reparam.height;
|
||||||
leftView.setLayoutParams(reparam);
|
leftView.setLayoutParams(reparam);
|
||||||
|
|
||||||
switchUsrBtn.setEnabled(!isLaunching);
|
switchUsrBtn.setEnabled(!isLaunching);
|
||||||
logoutBtn.setEnabled(!isLaunching);
|
logoutBtn.setEnabled(!isLaunching);
|
||||||
versionSelector.setEnabled(!isLaunching);
|
mVersionSelector.setEnabled(!isLaunching);
|
||||||
canBack = !isLaunching;
|
canBack = !isLaunching;
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
@ -473,299 +340,16 @@ public class PojavLauncherActivity extends AppCompatActivity
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private GameRunnerTask mTask;
|
|
||||||
|
|
||||||
public void launchGame(View v)
|
public void launchGame(View v)
|
||||||
{
|
{
|
||||||
if (!canBack && isAssetsProcessing) {
|
if (!canBack && mIsAssetsProcessing) {
|
||||||
isAssetsProcessing = false;
|
mIsAssetsProcessing = false;
|
||||||
statusIsLaunching(false);
|
statusIsLaunching(false);
|
||||||
} else if (canBack) {
|
} else if (canBack) {
|
||||||
v.setEnabled(false);
|
v.setEnabled(false);
|
||||||
mTask = new GameRunnerTask();
|
mTask = new MinecraftDownloaderTask(this);
|
||||||
mTask.execute(profile.getVersion());
|
mTask.execute(mProfile.getVersion());
|
||||||
crashView.resetCrashLog = true;
|
mCrashView.resetCrashLog = true;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class GameRunnerTask extends AsyncTask<String, String, Throwable>
|
|
||||||
{
|
|
||||||
private boolean launchWithError = false;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPreExecute() {
|
|
||||||
launchProgress.setMax(1);
|
|
||||||
statusIsLaunching(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
private JMinecraftVersionList.Version verInfo;
|
|
||||||
@Override
|
|
||||||
protected Throwable doInBackground(final String[] p1) {
|
|
||||||
Throwable throwable = null;
|
|
||||||
try {
|
|
||||||
final String downVName = "/" + p1[0] + "/" + p1[0];
|
|
||||||
|
|
||||||
//Downloading libraries
|
|
||||||
String minecraftMainJar = Tools.versnDir + downVName + ".jar";
|
|
||||||
JAssets assets = null;
|
|
||||||
try {
|
|
||||||
//com.pojavdx.dx.mod.Main.debug = true;
|
|
||||||
|
|
||||||
String verJsonDir = Tools.versnDir + downVName + ".json";
|
|
||||||
|
|
||||||
verInfo = findVersion(p1[0]);
|
|
||||||
|
|
||||||
if (verInfo.url != null && !new File(verJsonDir).exists()) {
|
|
||||||
publishProgress("1", "Downloading " + p1[0] + " configuration...");
|
|
||||||
Tools.downloadFile(
|
|
||||||
verInfo.url,
|
|
||||||
verJsonDir
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
verInfo = Tools.getVersionInfo(p1[0]);
|
|
||||||
assets = downloadIndex(verInfo.assets, new File(Tools.ASSETS_PATH, "indexes/" + verInfo.assets + ".json"));
|
|
||||||
|
|
||||||
File outLib;
|
|
||||||
String libPathURL;
|
|
||||||
|
|
||||||
setMax(verInfo.libraries.length + 4 + assets.objects.size());
|
|
||||||
for (final DependentLibrary libItem : verInfo.libraries) {
|
|
||||||
|
|
||||||
if (// libItem.name.startsWith("com.google.code.gson:gson") ||
|
|
||||||
// libItem.name.startsWith("com.mojang:realms") ||
|
|
||||||
libItem.name.startsWith("net.java.jinput") ||
|
|
||||||
// libItem.name.startsWith("net.minecraft.launchwrapper") ||
|
|
||||||
|
|
||||||
// FIXME lib below!
|
|
||||||
// libItem.name.startsWith("optifine:launchwrapper-of") ||
|
|
||||||
|
|
||||||
// libItem.name.startsWith("org.lwjgl.lwjgl:lwjgl") ||
|
|
||||||
libItem.name.startsWith("org.lwjgl")
|
|
||||||
// libItem.name.startsWith("tv.twitch")
|
|
||||||
) { // Black list
|
|
||||||
publishProgress("1", "Ignored " + libItem.name);
|
|
||||||
//Thread.sleep(100);
|
|
||||||
} else {
|
|
||||||
|
|
||||||
String[] libInfo = libItem.name.split(":");
|
|
||||||
String libArtifact = Tools.artifactToPath(libInfo[0], libInfo[1], libInfo[2]);
|
|
||||||
outLib = new File(Tools.libraries + "/" + libArtifact);
|
|
||||||
outLib.getParentFile().mkdirs();
|
|
||||||
|
|
||||||
if (!outLib.exists()) {
|
|
||||||
publishProgress("1", getString(R.string.mcl_launch_download_lib, libItem.name));
|
|
||||||
|
|
||||||
boolean skipIfFailed = false;
|
|
||||||
|
|
||||||
if (libItem.downloads == null || libItem.downloads.artifact == null) {
|
|
||||||
MinecraftLibraryArtifact artifact = new MinecraftLibraryArtifact();
|
|
||||||
artifact.url = (libItem.url == null ? "https://libraries.minecraft.net/" : libItem.url) + libArtifact;
|
|
||||||
libItem.downloads = new DependentLibrary.LibraryDownloads(artifact);
|
|
||||||
|
|
||||||
skipIfFailed = true;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
libPathURL = libItem.downloads.artifact.url;
|
|
||||||
Tools.downloadFile(
|
|
||||||
libPathURL,
|
|
||||||
outLib.getAbsolutePath()
|
|
||||||
);
|
|
||||||
} catch (Throwable th) {
|
|
||||||
if (!skipIfFailed) {
|
|
||||||
throw th;
|
|
||||||
} else {
|
|
||||||
th.printStackTrace();
|
|
||||||
publishProgress("0", th.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
publishProgress("1", getString(R.string.mcl_launch_download_client, p1[0]));
|
|
||||||
File minecraftMainFile = new File(minecraftMainJar);
|
|
||||||
if (!minecraftMainFile.exists() || minecraftMainFile.length() == 0l) {
|
|
||||||
try {
|
|
||||||
Tools.downloadFile(
|
|
||||||
verInfo.downloads.values().toArray(new MinecraftClientInfo[0])[0].url,
|
|
||||||
minecraftMainJar
|
|
||||||
);
|
|
||||||
} catch (Throwable th) {
|
|
||||||
if (verInfo.inheritsFrom != null) {
|
|
||||||
minecraftMainFile.delete();
|
|
||||||
IOUtils.copy(new FileInputStream(new File(Tools.versnDir, verInfo.inheritsFrom + "/" + verInfo.inheritsFrom + ".jar")), new FileOutputStream(minecraftMainFile));
|
|
||||||
} else {
|
|
||||||
throw th;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (Throwable e) {
|
|
||||||
launchWithError = true;
|
|
||||||
throw e;
|
|
||||||
}
|
|
||||||
|
|
||||||
publishProgress("1", getString(R.string.mcl_launch_cleancache));
|
|
||||||
// new File(inputPath).delete();
|
|
||||||
|
|
||||||
for (File f : new File(Tools.versnDir).listFiles()) {
|
|
||||||
if(f.getName().endsWith(".part")) {
|
|
||||||
Log.d(Tools.APP_NAME, "Cleaning cache: " + f);
|
|
||||||
f.delete();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
isAssetsProcessing = true;
|
|
||||||
playButton.post(new Runnable(){
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
playButton.setText("Skip");
|
|
||||||
playButton.setEnabled(true);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
publishProgress("1", getString(R.string.mcl_launch_download_assets));
|
|
||||||
try {
|
|
||||||
downloadAssets(assets, verInfo.assets, new File(Tools.ASSETS_PATH));
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
|
|
||||||
// Ignore it
|
|
||||||
launchWithError = false;
|
|
||||||
} finally {
|
|
||||||
isAssetsProcessing = false;
|
|
||||||
}
|
|
||||||
} catch (Throwable th){
|
|
||||||
throwable = th;
|
|
||||||
} finally {
|
|
||||||
return throwable;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
private int addProgress = 0; // 34
|
|
||||||
|
|
||||||
public void zeroProgress()
|
|
||||||
{
|
|
||||||
addProgress = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMax(final int value)
|
|
||||||
{
|
|
||||||
launchProgress.post(new Runnable(){
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
launchProgress.setMax(value);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onProgressUpdate(String... p1)
|
|
||||||
{
|
|
||||||
int addedProg = Integer.parseInt(p1[0]);
|
|
||||||
if (addedProg != -1) {
|
|
||||||
addProgress = addProgress + addedProg;
|
|
||||||
launchProgress.setProgress(addProgress);
|
|
||||||
|
|
||||||
launchTextStatus.setText(p1[1]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (p1.length < 3) consoleView.putLog(p1[1] + (p1.length < 3 ? "\n" : ""));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPostExecute(Throwable p1)
|
|
||||||
{
|
|
||||||
playButton.setText("Play");
|
|
||||||
playButton.setEnabled(true);
|
|
||||||
launchProgress.setMax(100);
|
|
||||||
launchProgress.setProgress(0);
|
|
||||||
statusIsLaunching(false);
|
|
||||||
if(p1 != null) {
|
|
||||||
p1.printStackTrace();
|
|
||||||
Tools.showError(PojavLauncherActivity.this, p1);
|
|
||||||
}
|
|
||||||
if(!launchWithError) {
|
|
||||||
crashView.setLastCrash("");
|
|
||||||
|
|
||||||
try {
|
|
||||||
/*
|
|
||||||
List<String> jvmArgs = ManagementFactory.getRuntimeMXBean().getInputArguments();
|
|
||||||
jvmArgs.add("-Xms128M");
|
|
||||||
jvmArgs.add("-Xmx1G");
|
|
||||||
*/
|
|
||||||
Intent mainIntent = new Intent(PojavLauncherActivity.this, MainActivity.class);
|
|
||||||
// mainIntent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT);
|
|
||||||
mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
|
|
||||||
mainIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
|
|
||||||
if (LauncherPreferences.PREF_FREEFORM) {
|
|
||||||
DisplayMetrics dm = new DisplayMetrics();
|
|
||||||
getWindowManager().getDefaultDisplay().getMetrics(dm);
|
|
||||||
|
|
||||||
ActivityOptions options = (ActivityOptions) ActivityOptions.class.getMethod("makeBasic").invoke(null);
|
|
||||||
Rect freeformRect = new Rect(0, 0, dm.widthPixels / 2, dm.heightPixels / 2);
|
|
||||||
options.getClass().getDeclaredMethod("setLaunchBounds", Rect.class).invoke(options, freeformRect);
|
|
||||||
startActivity(mainIntent, options.toBundle());
|
|
||||||
} else {
|
|
||||||
startActivity(mainIntent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Throwable e) {
|
|
||||||
Tools.showError(PojavLauncherActivity.this, e);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
FloatingIntent maini = new FloatingIntent(PojavLauncherActivity.this, MainActivity.class);
|
|
||||||
maini.startFloatingActivity();
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
mTask = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Gson gsonss = gson;
|
|
||||||
public static final String MINECRAFT_RES = "http://resources.download.minecraft.net/";
|
|
||||||
|
|
||||||
public JAssets downloadIndex(String versionName, File output) throws Exception {
|
|
||||||
String versionJson = DownloadUtils.downloadString(verInfo.assetIndex != null ? verInfo.assetIndex.url : "http://s3.amazonaws.com/Minecraft.Download/indexes/" + versionName + ".json");
|
|
||||||
JAssets version = gsonss.fromJson(versionJson, JAssets.class);
|
|
||||||
output.getParentFile().mkdirs();
|
|
||||||
Tools.write(output.getAbsolutePath(), versionJson.getBytes(Charset.forName("UTF-8")));
|
|
||||||
return version;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void downloadAsset(JAssetInfo asset, File objectsDir) throws IOException, Throwable {
|
|
||||||
String assetPath = asset.hash.substring(0, 2) + "/" + asset.hash;
|
|
||||||
File outFile = new File(objectsDir, assetPath);
|
|
||||||
if (!outFile.exists()) {
|
|
||||||
DownloadUtils.downloadFile(MINECRAFT_RES + assetPath, outFile);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void downloadAssets(JAssets assets, String assetsVersion, File outputDir) throws IOException, Throwable {
|
|
||||||
File hasDownloadedFile = new File(outputDir, "downloaded/" + assetsVersion + ".downloaded");
|
|
||||||
if (!hasDownloadedFile.exists()) {
|
|
||||||
System.out.println("Assets begin time: " + System.currentTimeMillis());
|
|
||||||
Map<String, JAssetInfo> assetsObjects = assets.objects;
|
|
||||||
launchProgress.setMax(assetsObjects.size());
|
|
||||||
zeroProgress();
|
|
||||||
File objectsDir = new File(outputDir, "objects");
|
|
||||||
int downloadedSs = 0;
|
|
||||||
for (JAssetInfo asset : assetsObjects.values()) {
|
|
||||||
if (!isAssetsProcessing) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
downloadAsset(asset, objectsDir);
|
|
||||||
publishProgress("1", getString(R.string.mcl_launch_downloading, assetsObjects.keySet().toArray(new String[0])[downloadedSs]));
|
|
||||||
downloadedSs++;
|
|
||||||
}
|
|
||||||
hasDownloadedFile.getParentFile().mkdirs();
|
|
||||||
hasDownloadedFile.createNewFile();
|
|
||||||
System.out.println("Assets end time: " + System.currentTimeMillis());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,317 @@
|
|||||||
|
package net.kdt.pojavlaunch.tasks;
|
||||||
|
|
||||||
|
import android.app.*;
|
||||||
|
import android.content.*;
|
||||||
|
import android.graphics.*;
|
||||||
|
import android.os.*;
|
||||||
|
import android.util.*;
|
||||||
|
import com.google.gson.*;
|
||||||
|
import java.io.*;
|
||||||
|
import java.util.*;
|
||||||
|
import net.kdt.pojavlaunch.*;
|
||||||
|
import net.kdt.pojavlaunch.prefs.*;
|
||||||
|
import net.kdt.pojavlaunch.utils.*;
|
||||||
|
import net.kdt.pojavlaunch.value.*;
|
||||||
|
import org.apache.commons.io.*;
|
||||||
|
|
||||||
|
public class MinecraftDownloaderTask extends AsyncTask<String, String, Throwable>
|
||||||
|
{
|
||||||
|
private BaseLauncherActivity mActivity;
|
||||||
|
private boolean launchWithError = false;
|
||||||
|
|
||||||
|
public MinecraftDownloaderTask(BaseLauncherActivity activity) {
|
||||||
|
mActivity = activity;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPreExecute() {
|
||||||
|
mActivity.mLaunchProgress.setMax(1);
|
||||||
|
mActivity.statusIsLaunching(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private JMinecraftVersionList.Version verInfo;
|
||||||
|
@Override
|
||||||
|
protected Throwable doInBackground(final String[] p1) {
|
||||||
|
Throwable throwable = null;
|
||||||
|
try {
|
||||||
|
final String downVName = "/" + p1[0] + "/" + p1[0];
|
||||||
|
|
||||||
|
//Downloading libraries
|
||||||
|
String minecraftMainJar = Tools.versnDir + downVName + ".jar";
|
||||||
|
JAssets assets = null;
|
||||||
|
try {
|
||||||
|
//com.pojavdx.dx.mod.Main.debug = true;
|
||||||
|
|
||||||
|
String verJsonDir = Tools.versnDir + downVName + ".json";
|
||||||
|
|
||||||
|
verInfo = findVersion(p1[0]);
|
||||||
|
|
||||||
|
if (verInfo.url != null && !new File(verJsonDir).exists()) {
|
||||||
|
publishProgress("1", "Downloading " + p1[0] + " configuration...");
|
||||||
|
Tools.downloadFile(
|
||||||
|
verInfo.url,
|
||||||
|
verJsonDir
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
verInfo = Tools.getVersionInfo(p1[0]);
|
||||||
|
assets = downloadIndex(verInfo.assets, new File(Tools.ASSETS_PATH, "indexes/" + verInfo.assets + ".json"));
|
||||||
|
|
||||||
|
File outLib;
|
||||||
|
String libPathURL;
|
||||||
|
|
||||||
|
setMax(verInfo.libraries.length + 4 + assets.objects.size());
|
||||||
|
for (final DependentLibrary libItem : verInfo.libraries) {
|
||||||
|
|
||||||
|
if (// libItem.name.startsWith("com.google.code.gson:gson") ||
|
||||||
|
// libItem.name.startsWith("com.mojang:realms") ||
|
||||||
|
libItem.name.startsWith("net.java.jinput") ||
|
||||||
|
// libItem.name.startsWith("net.minecraft.launchwrapper") ||
|
||||||
|
|
||||||
|
// FIXME lib below!
|
||||||
|
// libItem.name.startsWith("optifine:launchwrapper-of") ||
|
||||||
|
|
||||||
|
// libItem.name.startsWith("org.lwjgl.lwjgl:lwjgl") ||
|
||||||
|
libItem.name.startsWith("org.lwjgl")
|
||||||
|
// libItem.name.startsWith("tv.twitch")
|
||||||
|
) { // Black list
|
||||||
|
publishProgress("1", "Ignored " + libItem.name);
|
||||||
|
//Thread.sleep(100);
|
||||||
|
} else {
|
||||||
|
|
||||||
|
String[] libInfo = libItem.name.split(":");
|
||||||
|
String libArtifact = Tools.artifactToPath(libInfo[0], libInfo[1], libInfo[2]);
|
||||||
|
outLib = new File(Tools.libraries + "/" + libArtifact);
|
||||||
|
outLib.getParentFile().mkdirs();
|
||||||
|
|
||||||
|
if (!outLib.exists()) {
|
||||||
|
publishProgress("1", mActivity.getString(R.string.mcl_launch_download_lib, libItem.name));
|
||||||
|
|
||||||
|
boolean skipIfFailed = false;
|
||||||
|
|
||||||
|
if (libItem.downloads == null || libItem.downloads.artifact == null) {
|
||||||
|
MinecraftLibraryArtifact artifact = new MinecraftLibraryArtifact();
|
||||||
|
artifact.url = (libItem.url == null ? "https://libraries.minecraft.net/" : libItem.url) + libArtifact;
|
||||||
|
libItem.downloads = new DependentLibrary.LibraryDownloads(artifact);
|
||||||
|
|
||||||
|
skipIfFailed = true;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
libPathURL = libItem.downloads.artifact.url;
|
||||||
|
Tools.downloadFile(
|
||||||
|
libPathURL,
|
||||||
|
outLib.getAbsolutePath()
|
||||||
|
);
|
||||||
|
} catch (Throwable th) {
|
||||||
|
if (!skipIfFailed) {
|
||||||
|
throw th;
|
||||||
|
} else {
|
||||||
|
th.printStackTrace();
|
||||||
|
publishProgress("0", th.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
publishProgress("1", mActivity.getString(R.string.mcl_launch_download_client, p1[0]));
|
||||||
|
File minecraftMainFile = new File(minecraftMainJar);
|
||||||
|
if (!minecraftMainFile.exists() || minecraftMainFile.length() == 0l) {
|
||||||
|
try {
|
||||||
|
Tools.downloadFile(
|
||||||
|
verInfo.downloads.values().toArray(new MinecraftClientInfo[0])[0].url,
|
||||||
|
minecraftMainJar
|
||||||
|
);
|
||||||
|
} catch (Throwable th) {
|
||||||
|
if (verInfo.inheritsFrom != null) {
|
||||||
|
minecraftMainFile.delete();
|
||||||
|
IOUtils.copy(new FileInputStream(new File(Tools.versnDir, verInfo.inheritsFrom + "/" + verInfo.inheritsFrom + ".jar")), new FileOutputStream(minecraftMainFile));
|
||||||
|
} else {
|
||||||
|
throw th;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Throwable e) {
|
||||||
|
launchWithError = true;
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
|
||||||
|
publishProgress("1", mActivity.getString(R.string.mcl_launch_cleancache));
|
||||||
|
// new File(inputPath).delete();
|
||||||
|
|
||||||
|
for (File f : new File(Tools.versnDir).listFiles()) {
|
||||||
|
if(f.getName().endsWith(".part")) {
|
||||||
|
Log.d(Tools.APP_NAME, "Cleaning cache: " + f);
|
||||||
|
f.delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mActivity.mIsAssetsProcessing = true;
|
||||||
|
mActivity.mPlayButton.post(new Runnable(){
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
mActivity.mPlayButton.setText("Skip");
|
||||||
|
mActivity.mPlayButton.setEnabled(true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
publishProgress("1", mActivity.getString(R.string.mcl_launch_download_assets));
|
||||||
|
try {
|
||||||
|
downloadAssets(assets, verInfo.assets, new File(Tools.ASSETS_PATH));
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
|
||||||
|
// Ignore it
|
||||||
|
launchWithError = false;
|
||||||
|
} finally {
|
||||||
|
mActivity.mIsAssetsProcessing = false;
|
||||||
|
}
|
||||||
|
} catch (Throwable th){
|
||||||
|
throwable = th;
|
||||||
|
} finally {
|
||||||
|
return throwable;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private int addProgress = 0; // 34
|
||||||
|
|
||||||
|
public void zeroProgress()
|
||||||
|
{
|
||||||
|
addProgress = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMax(final int value)
|
||||||
|
{
|
||||||
|
mActivity.mLaunchProgress.post(new Runnable(){
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
mActivity.mLaunchProgress.setMax(value);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onProgressUpdate(String... p1)
|
||||||
|
{
|
||||||
|
int addedProg = Integer.parseInt(p1[0]);
|
||||||
|
if (addedProg != -1) {
|
||||||
|
addProgress = addProgress + addedProg;
|
||||||
|
mActivity.mLaunchProgress.setProgress(addProgress);
|
||||||
|
|
||||||
|
mActivity.mLaunchTextStatus.setText(p1[1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (p1.length < 3) {
|
||||||
|
mActivity.mConsoleView.putLog(p1[1] + (p1.length < 3 ? "\n" : ""));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(Throwable p1)
|
||||||
|
{
|
||||||
|
mActivity.mPlayButton.setText("Play");
|
||||||
|
mActivity.mPlayButton.setEnabled(true);
|
||||||
|
mActivity.mLaunchProgress.setMax(100);
|
||||||
|
mActivity.mLaunchProgress.setProgress(0);
|
||||||
|
mActivity.statusIsLaunching(false);
|
||||||
|
if(p1 != null) {
|
||||||
|
p1.printStackTrace();
|
||||||
|
Tools.showError(mActivity, p1);
|
||||||
|
}
|
||||||
|
if(!launchWithError) {
|
||||||
|
mActivity.mCrashView.setLastCrash("");
|
||||||
|
|
||||||
|
try {
|
||||||
|
/*
|
||||||
|
List<String> jvmArgs = ManagementFactory.getRuntimeMXBean().getInputArguments();
|
||||||
|
jvmArgs.add("-Xms128M");
|
||||||
|
jvmArgs.add("-Xmx1G");
|
||||||
|
*/
|
||||||
|
Intent mainIntent = new Intent(mActivity, MainActivity.class);
|
||||||
|
// mainIntent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT);
|
||||||
|
mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
|
||||||
|
mainIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
|
||||||
|
if (LauncherPreferences.PREF_FREEFORM) {
|
||||||
|
DisplayMetrics dm = new DisplayMetrics();
|
||||||
|
mActivity.getWindowManager().getDefaultDisplay().getMetrics(dm);
|
||||||
|
|
||||||
|
ActivityOptions options = (ActivityOptions) ActivityOptions.class.getMethod("makeBasic").invoke(null);
|
||||||
|
Rect freeformRect = new Rect(0, 0, dm.widthPixels / 2, dm.heightPixels / 2);
|
||||||
|
options.getClass().getDeclaredMethod("setLaunchBounds", Rect.class).invoke(options, freeformRect);
|
||||||
|
mActivity.startActivity(mainIntent, options.toBundle());
|
||||||
|
} else {
|
||||||
|
mActivity.startActivity(mainIntent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Throwable e) {
|
||||||
|
Tools.showError(mActivity, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
FloatingIntent maini = new FloatingIntent(PojavLauncherActivity.this, MainActivity.class);
|
||||||
|
maini.startFloatingActivity();
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
mActivity.mTask = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final String MINECRAFT_RES = "http://resources.download.minecraft.net/";
|
||||||
|
|
||||||
|
public JAssets downloadIndex(String versionName, File output) throws Throwable {
|
||||||
|
if (!output.exists()) {
|
||||||
|
output.getParentFile().mkdirs();
|
||||||
|
DownloadUtils.downloadFile(verInfo.assetIndex != null ? verInfo.assetIndex.url : "http://s3.amazonaws.com/Minecraft.Download/indexes/" + versionName + ".json", output);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new Gson().fromJson(Tools.read(output.getAbsolutePath()), JAssets.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void downloadAsset(JAssetInfo asset, File objectsDir) throws IOException, Throwable {
|
||||||
|
String assetPath = asset.hash.substring(0, 2) + "/" + asset.hash;
|
||||||
|
File outFile = new File(objectsDir, assetPath);
|
||||||
|
if (!outFile.exists()) {
|
||||||
|
DownloadUtils.downloadFile(MINECRAFT_RES + assetPath, outFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void downloadAssets(JAssets assets, String assetsVersion, File outputDir) throws IOException, Throwable {
|
||||||
|
File hasDownloadedFile = new File(outputDir, "downloaded/" + assetsVersion + ".downloaded");
|
||||||
|
if (!hasDownloadedFile.exists()) {
|
||||||
|
System.out.println("Assets begin time: " + System.currentTimeMillis());
|
||||||
|
Map<String, JAssetInfo> assetsObjects = assets.objects;
|
||||||
|
mActivity.mLaunchProgress.setMax(assetsObjects.size());
|
||||||
|
zeroProgress();
|
||||||
|
File objectsDir = new File(outputDir, "objects");
|
||||||
|
int downloadedSs = 0;
|
||||||
|
for (JAssetInfo asset : assetsObjects.values()) {
|
||||||
|
if (!mActivity.mIsAssetsProcessing) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
downloadAsset(asset, objectsDir);
|
||||||
|
publishProgress("1", mActivity.getString(R.string.mcl_launch_downloading, assetsObjects.keySet().toArray(new String[0])[downloadedSs]));
|
||||||
|
downloadedSs++;
|
||||||
|
}
|
||||||
|
hasDownloadedFile.getParentFile().mkdirs();
|
||||||
|
hasDownloadedFile.createNewFile();
|
||||||
|
System.out.println("Assets end time: " + System.currentTimeMillis());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private JMinecraftVersionList.Version findVersion(String version) {
|
||||||
|
if (mActivity.mVersionList != null) {
|
||||||
|
for (JMinecraftVersionList.Version valueVer: mActivity.mVersionList.versions) {
|
||||||
|
if (valueVer.id.equals(version)) {
|
||||||
|
return valueVer;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Custom version, inherits from base.
|
||||||
|
return Tools.getVersionInfo(version);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,128 @@
|
|||||||
|
package net.kdt.pojavlaunch.tasks;
|
||||||
|
|
||||||
|
import android.os.*;
|
||||||
|
import android.support.v7.widget.*;
|
||||||
|
import android.view.*;
|
||||||
|
import android.widget.*;
|
||||||
|
import android.widget.AdapterView.*;
|
||||||
|
import com.google.gson.*;
|
||||||
|
import java.io.*;
|
||||||
|
import java.util.*;
|
||||||
|
import net.kdt.pojavlaunch.*;
|
||||||
|
import net.kdt.pojavlaunch.prefs.*;
|
||||||
|
import net.kdt.pojavlaunch.utils.*;
|
||||||
|
|
||||||
|
import android.support.v7.widget.PopupMenu;
|
||||||
|
|
||||||
|
public class RefreshVersionListTask extends AsyncTask<Void, Void, ArrayList<String>>
|
||||||
|
{
|
||||||
|
private BaseLauncherActivity mActivity;
|
||||||
|
|
||||||
|
public RefreshVersionListTask(BaseLauncherActivity activity) {
|
||||||
|
mActivity = activity;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected ArrayList<String> doInBackground(Void[] p1)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
mActivity.mVersionList = new Gson().fromJson(DownloadUtils.downloadString("https://launchermeta.mojang.com/mc/game/version_manifest.json"), JMinecraftVersionList.class);
|
||||||
|
ArrayList<String> versionStringList = filter(mActivity.mVersionList.versions, new File(Tools.versnDir).listFiles());
|
||||||
|
|
||||||
|
return versionStringList;
|
||||||
|
} catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(ArrayList<String> result)
|
||||||
|
{
|
||||||
|
super.onPostExecute(result);
|
||||||
|
|
||||||
|
final PopupMenu popup = new PopupMenu(mActivity, mActivity.mVersionSelector);
|
||||||
|
popup.getMenuInflater().inflate(R.menu.menu_versionopt, popup.getMenu());
|
||||||
|
|
||||||
|
if(result != null && result.size() > 0) {
|
||||||
|
ArrayAdapter<String> adapter = new ArrayAdapter<String>(mActivity, android.R.layout.simple_spinner_item, result);
|
||||||
|
adapter.setDropDownViewResource(android.R.layout.simple_list_item_single_choice);
|
||||||
|
mActivity.mVersionSelector.setAdapter(adapter);
|
||||||
|
mActivity.mVersionSelector.setSelection(selectAt(result.toArray(new String[0]), mActivity.mProfile.getVersion()));
|
||||||
|
} else {
|
||||||
|
mActivity.mVersionSelector.setSelection(selectAt(mActivity.mAvailableVersions, mActivity.mProfile.getVersion()));
|
||||||
|
}
|
||||||
|
mActivity.mVersionSelector.setOnItemSelectedListener(new OnItemSelectedListener(){
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onItemSelected(AdapterView<?> p1, View p2, int p3, long p4)
|
||||||
|
{
|
||||||
|
String version = p1.getItemAtPosition(p3).toString();
|
||||||
|
mActivity.mProfile.setVersion(version);
|
||||||
|
|
||||||
|
PojavProfile.setCurrentProfile(mActivity, mActivity.mProfile);
|
||||||
|
if (PojavProfile.isFileType(mActivity)) {
|
||||||
|
PojavProfile.setCurrentProfile(mActivity, MCProfile.build(mActivity.mProfile));
|
||||||
|
}
|
||||||
|
|
||||||
|
mActivity.mTextVersion.setText(mActivity.getString(R.string.mcl_version_msg, version));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onNothingSelected(AdapterView<?> p1)
|
||||||
|
{
|
||||||
|
// TODO: Implement this method
|
||||||
|
}
|
||||||
|
});
|
||||||
|
mActivity.mVersionSelector.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener(){
|
||||||
|
@Override
|
||||||
|
public boolean onItemLongClick(AdapterView<?> p1, View p2, int p3, long p4)
|
||||||
|
{
|
||||||
|
// Implement copy, remove, reinstall,...
|
||||||
|
popup.show();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
|
||||||
|
public boolean onMenuItemClick(MenuItem item) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
mActivity.mTextVersion.setText(mActivity.getString(R.string.mcl_version_msg) + mActivity.mVersionSelector.getSelectedItem());
|
||||||
|
}
|
||||||
|
|
||||||
|
private ArrayList<String> filter(JMinecraftVersionList.Version[] list1, File[] list2) {
|
||||||
|
ArrayList<String> output = new ArrayList<String>();
|
||||||
|
|
||||||
|
for (JMinecraftVersionList.Version value1: list1) {
|
||||||
|
if ((value1.type.equals("release") && LauncherPreferences.PREF_VERTYPE_RELEASE) ||
|
||||||
|
(value1.type.equals("snapshot") && LauncherPreferences.PREF_VERTYPE_SNAPSHOT) ||
|
||||||
|
(value1.type.equals("old_alpha") && LauncherPreferences.PREF_VERTYPE_OLDALPHA) ||
|
||||||
|
(value1.type.equals("old_beta") && LauncherPreferences.PREF_VERTYPE_OLDBETA)) {
|
||||||
|
output.add(value1.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (File value2: list2) {
|
||||||
|
if (!output.contains(value2.getName())) {
|
||||||
|
output.add(value2.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int selectAt(String[] strArr, String select) {
|
||||||
|
int count = 0;
|
||||||
|
for(String str : strArr){
|
||||||
|
if (str.equals(select)) {
|
||||||
|
return count;
|
||||||
|
} else {
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user