├── .github └── FUNDING.yml ├── .gitignore ├── .gitmodules ├── README.md ├── build.gradle ├── debug.keystore ├── docs ├── QPython_3x_featues.md ├── QPython_Ox_featues.md ├── README.md ├── qpyqrcode.png └── wx-contact-river.png ├── gradle.properties ├── gradle └── wrapper │ └── gradle-wrapper.jar ├── gradlew ├── gradlew.bat ├── local.properties ├── qpypluginman ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── quseit │ │ └── common │ │ └── updater │ │ ├── Updater.java │ │ ├── callback │ │ └── DialogCallback.java │ │ ├── convertor │ │ └── Convertor.java │ │ ├── downloader │ │ ├── DefaultDownloader.java │ │ └── Downloader.java │ │ ├── service │ │ ├── DefaultService.java │ │ └── Service.java │ │ └── updatepkg │ │ ├── Apk.java │ │ └── UpdatePackage.java │ └── res │ ├── drawable │ └── ic_cloud_download_black_24dp.png │ ├── values-zh-rCn │ └── strings.xml │ ├── values-zh-rTW │ └── strings.xml │ └── values │ └── strings.xml ├── qpysdk ├── README ├── build.gradle ├── libs │ └── locale_platform.jar ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── assets │ ├── android.js │ ├── html │ │ ├── index.html │ │ └── index.js │ ├── json2.js │ ├── stylesheets │ │ ├── css │ │ │ ├── bootstrap.min.css │ │ │ ├── sticky-footer.css │ │ │ └── style.css │ │ └── js │ │ │ ├── bootstrap.min.js │ │ │ └── jquery.min.js │ └── webapp.html │ ├── java │ ├── com │ │ └── android │ │ │ └── vending │ │ │ └── billing │ │ │ └── IInAppBillingService.aidl │ └── org │ │ ├── audiostream │ │ └── AudioIn.java │ │ ├── jnius │ │ └── NativeInvocationHandler.java │ │ ├── libsdl │ │ └── app │ │ │ └── SDLActivity.java │ │ ├── qpython │ │ └── qpysdk │ │ │ ├── Exec.java │ │ │ ├── QPyConstants.java │ │ │ ├── QPySDK.java │ │ │ └── utils │ │ │ ├── AndroidCompat.java │ │ │ ├── AssetExtract.java │ │ │ ├── DateTimeHelper.java │ │ │ ├── FileExtract.java │ │ │ ├── FileHelper.java │ │ │ ├── FileUtils.java │ │ │ ├── ResourceManager.java │ │ │ ├── StreamGobbler.java │ │ │ └── Utils.java │ │ └── renpy │ │ └── android │ │ ├── Action.java │ │ ├── AssetExtract.java │ │ ├── Constants.java │ │ ├── GenericBroadcastReceiver.java │ │ ├── GenericBroadcastReceiverCallback.java │ │ ├── PythonSDLActivity.java │ │ ├── RenPySound.java │ │ ├── ResourceManager.java │ │ └── VideoPlayer.java │ ├── libs │ └── armeabi-v7a │ │ ├── libSDL2.so │ │ ├── libSDL2_gfx.so │ │ ├── libSDL2_image.so │ │ ├── libSDL2_mixer.so │ │ ├── libSDL2_ttf.so │ │ ├── libmain.so │ │ ├── libpng16.so │ │ ├── libpython2.7.so │ │ └── libqpysdk.so │ └── res │ ├── drawable │ └── presplash2.jpg │ ├── values-zh-rCN │ └── strings.xml │ └── values │ └── strings.xml ├── qpython ├── build.gradle ├── google-services.json ├── gradle │ └── wrapper │ │ └── gradle-wrapper.jar ├── gradlew ├── gradlew.bat ├── libs │ ├── android-async-http-1.4.8.aar │ └── markdown4j.jar ├── proguard-rules.pro ├── release │ ├── cn │ │ └── release │ │ │ └── output.json │ └── output.json └── src │ ├── lint.xml │ ├── main │ ├── AndroidManifest.xml │ ├── aidl │ │ └── com │ │ │ └── android │ │ │ └── vending │ │ │ └── billing │ │ │ └── IInAppBillingService.aidl │ ├── assets │ │ ├── Apache_License │ │ ├── QPy_ConsoleApp │ │ ├── QPy_PygameApp │ │ ├── QPy_SL4AApp │ │ ├── QPy_WebApp │ │ ├── The_MIT_License │ │ ├── Untitled.ipynb │ │ ├── ipynb.mp3 │ │ ├── notebook3.mp3 │ │ ├── private1.mp3 │ │ ├── private2.mp3 │ │ ├── private3.mp3 │ │ ├── private31.mp3 │ │ ├── private32.mp3 │ │ ├── private33.mp3 │ │ ├── public.mp3 │ │ ├── public3.mp3 │ │ ├── syntax │ │ │ ├── css.xml │ │ │ ├── html.xml │ │ │ ├── javascript.xml │ │ │ ├── json.xml │ │ │ ├── python.xml │ │ │ └── xml.xml │ │ ├── themes │ │ │ ├── Mac Classic.tmTheme │ │ │ └── Monokai Bright.tmTheme │ │ └── xmode.dtd │ ├── java │ │ └── org │ │ │ └── qpython │ │ │ ├── qpy │ │ │ ├── codeshare │ │ │ │ ├── CONSTANT.java │ │ │ │ ├── Clouded.java │ │ │ │ ├── IShareCode.java │ │ │ │ └── pojo │ │ │ │ │ ├── BookmarkerList.java │ │ │ │ │ ├── Gist.java │ │ │ │ │ ├── GistBase.java │ │ │ │ │ └── UploadedProject.java │ │ │ ├── console │ │ │ │ ├── BoundSession.java │ │ │ │ ├── Exec.java │ │ │ │ ├── GenericTermSession.java │ │ │ │ ├── RemoteInterface.java │ │ │ │ ├── RunScript.java │ │ │ │ ├── RunShortcut.java │ │ │ │ ├── ScriptExec.java │ │ │ │ ├── ShellTermSession.java │ │ │ │ ├── TermActivity.java │ │ │ │ ├── TermDebug.java │ │ │ │ ├── TermPreferences.java │ │ │ │ ├── TermService.java │ │ │ │ ├── TermView.java │ │ │ │ ├── TermViewFlipper.java │ │ │ │ ├── WindowList.java │ │ │ │ ├── WindowListAdapter.java │ │ │ │ ├── compont │ │ │ │ │ ├── ActionBarCompat.java │ │ │ │ │ ├── ActivityCompat.java │ │ │ │ │ ├── AlertDialogCompat.java │ │ │ │ │ ├── Base64.java │ │ │ │ │ ├── FileCompat.java │ │ │ │ │ ├── MenuItemCompat.java │ │ │ │ │ ├── PRNGFixes.java │ │ │ │ │ └── ServiceForegroundCompat.java │ │ │ │ ├── shortcuts │ │ │ │ │ ├── AddShortcut.java │ │ │ │ │ ├── ColorValue.java │ │ │ │ │ ├── FSNavigator.java │ │ │ │ │ └── TextIcon.java │ │ │ │ └── util │ │ │ │ │ ├── SessionList.java │ │ │ │ │ ├── ShortcutEncryption.java │ │ │ │ │ └── TermSettings.java │ │ │ ├── main │ │ │ │ ├── activity │ │ │ │ │ ├── AboutActivity.java │ │ │ │ │ ├── AppListActivity.java │ │ │ │ │ ├── CodeDetailActivity.java │ │ │ │ │ ├── CodeShareActivity.java │ │ │ │ │ ├── CourseActivity.java │ │ │ │ │ ├── CourseIndexActivity.java │ │ │ │ │ ├── CourseIndexFundingActivity.java │ │ │ │ │ ├── FTPActivity.java │ │ │ │ │ ├── GistActivity.java │ │ │ │ │ ├── GistDetailActivity.java │ │ │ │ │ ├── GistEditActivity.java │ │ │ │ │ ├── HomeMainActivity.java │ │ │ │ │ ├── LibActivity.java │ │ │ │ │ ├── LogActivity.java │ │ │ │ │ ├── MyGistActivity.java │ │ │ │ │ ├── NotebookActivity.java │ │ │ │ │ ├── NotebookListActivity.java │ │ │ │ │ ├── QWebViewActivity.java │ │ │ │ │ ├── QrCodeActivity.java │ │ │ │ │ ├── SettingActivity.java │ │ │ │ │ └── SplashActivity.java │ │ │ │ ├── adapter │ │ │ │ │ ├── AppListAdapter.java │ │ │ │ │ ├── CloudScriptAdapter.java │ │ │ │ │ ├── CodeCommentAdapter.java │ │ │ │ │ ├── CodeShareAdapter.java │ │ │ │ │ ├── CourseAdapter.java │ │ │ │ │ ├── CoursePagerAdapter.java │ │ │ │ │ ├── EditorFileTreeAdapter.java │ │ │ │ │ ├── FileTreeAdapter.java │ │ │ │ │ ├── GistAdapter.java │ │ │ │ │ ├── LibListAdapter.java │ │ │ │ │ ├── LibPagerAdapter.java │ │ │ │ │ ├── MyCourseAdapter.java │ │ │ │ │ ├── MyShareFragmentAdapter.java │ │ │ │ │ ├── MyViewHolder.java │ │ │ │ │ ├── NewsDetailAdapter.java │ │ │ │ │ ├── NotebookAdapter.java │ │ │ │ │ ├── StatePagerAdapter.java │ │ │ │ │ ├── UploadFileTreeAdapter.java │ │ │ │ │ └── ViewPagerAdapter.java │ │ │ │ ├── app │ │ │ │ │ ├── App.java │ │ │ │ │ ├── CONF.java │ │ │ │ │ └── User.java │ │ │ │ ├── dialog │ │ │ │ │ └── LogoDialog.java │ │ │ │ ├── event │ │ │ │ │ ├── AppsLoader.java │ │ │ │ │ ├── Bean.java │ │ │ │ │ └── ShareCodeCallback.java │ │ │ │ ├── fragment │ │ │ │ │ ├── CodeFragment.java │ │ │ │ │ ├── CourseFragment.java │ │ │ │ │ ├── FileFragment.java │ │ │ │ │ ├── GistFragment.java │ │ │ │ │ ├── LibAIPyFragment.java │ │ │ │ │ ├── LibProjectFragment.java │ │ │ │ │ ├── LibQPyPiFragment.java │ │ │ │ │ ├── LocalFragment.java │ │ │ │ │ ├── MyCourseFragment.java │ │ │ │ │ ├── MyGistFragment.java │ │ │ │ │ ├── RefreshFragment.java │ │ │ │ │ ├── SettingFragment.java │ │ │ │ │ └── TedSettingFragment.java │ │ │ │ ├── listener │ │ │ │ │ └── LoadmoreListener.java │ │ │ │ ├── model │ │ │ │ │ ├── AppModel.java │ │ │ │ │ ├── LocalAppModel.java │ │ │ │ │ ├── QPyScriptModel.java │ │ │ │ │ └── UpdateJson.java │ │ │ │ ├── receiver │ │ │ │ │ ├── BootBroadcastReceiver.java │ │ │ │ │ ├── DownloadNotebookReceiver.java │ │ │ │ │ ├── DownloadReceiver.java │ │ │ │ │ └── NotificationBean.java │ │ │ │ ├── server │ │ │ │ │ ├── CacheKey.java │ │ │ │ │ ├── MySubscriber.java │ │ │ │ │ ├── Service.java │ │ │ │ │ ├── ServiceRequest.java │ │ │ │ │ ├── gist │ │ │ │ │ │ ├── Api.java │ │ │ │ │ │ ├── BaseView.java │ │ │ │ │ │ ├── Controler.java │ │ │ │ │ │ ├── GistEvent.java │ │ │ │ │ │ ├── ResponseHandler.java │ │ │ │ │ │ ├── TokenManager.java │ │ │ │ │ │ ├── createScreen │ │ │ │ │ │ │ ├── CreateGistControler.java │ │ │ │ │ │ │ └── CreateGistView.java │ │ │ │ │ │ ├── detailScreen │ │ │ │ │ │ │ ├── DetailControler.java │ │ │ │ │ │ │ └── DetailView.java │ │ │ │ │ │ ├── indexScreen │ │ │ │ │ │ │ ├── GistHomeControler.java │ │ │ │ │ │ │ └── GistHomeView.java │ │ │ │ │ │ ├── loginScreen │ │ │ │ │ │ │ ├── LoginControler.java │ │ │ │ │ │ │ └── LoginView.java │ │ │ │ │ │ ├── myScreen │ │ │ │ │ │ │ ├── MyGistControler.java │ │ │ │ │ │ │ └── MyGistView.java │ │ │ │ │ │ ├── request │ │ │ │ │ │ │ ├── BaseRequest.java │ │ │ │ │ │ │ ├── CommentRequest.java │ │ │ │ │ │ │ ├── CreateRequest.java │ │ │ │ │ │ │ ├── LoginRequest.java │ │ │ │ │ │ │ ├── Request.java │ │ │ │ │ │ │ └── UpdateGistRequest.java │ │ │ │ │ │ ├── response │ │ │ │ │ │ │ ├── ADBean.java │ │ │ │ │ │ │ ├── CommentBean.java │ │ │ │ │ │ │ ├── GistBean.java │ │ │ │ │ │ │ ├── LoginResponse.java │ │ │ │ │ │ │ ├── ResponseBean.java │ │ │ │ │ │ │ └── UserBean.java │ │ │ │ │ │ └── service │ │ │ │ │ │ │ ├── GistService.java │ │ │ │ │ │ │ └── GistServiceFactory.java │ │ │ │ │ ├── http │ │ │ │ │ │ ├── Retrofitor.java │ │ │ │ │ │ └── SSLSocketFactoryImp.java │ │ │ │ │ └── model │ │ │ │ │ │ ├── BaseLibModel.java │ │ │ │ │ │ ├── CourseAdModel.java │ │ │ │ │ │ ├── CourseModel.java │ │ │ │ │ │ ├── DownloadProgressModel.java │ │ │ │ │ │ ├── GooglePurchaseModel.java │ │ │ │ │ │ ├── LibModel.java │ │ │ │ │ │ ├── MyCourse.java │ │ │ │ │ │ ├── PayStatusModel.java │ │ │ │ │ │ ├── QpypiModel.java │ │ │ │ │ │ ├── SettingModel.java │ │ │ │ │ │ └── UpdateModel.java │ │ │ │ ├── service │ │ │ │ │ ├── FTPServerService.java │ │ │ │ │ └── QPyService.java │ │ │ │ ├── utils │ │ │ │ │ ├── Bus.java │ │ │ │ │ └── Utils.java │ │ │ │ └── widget │ │ │ │ │ ├── CodeReviewDialog.java │ │ │ │ │ ├── CodeSendComment.java │ │ │ │ │ ├── DividerItemDecoration.java │ │ │ │ │ ├── GridSpace.java │ │ │ │ │ ├── Indent.java │ │ │ │ │ ├── LoadingDialog.java │ │ │ │ │ ├── MyNestedScrollView.java │ │ │ │ │ ├── NonScrollListView.java │ │ │ │ │ ├── NotebookDialog.java │ │ │ │ │ ├── PercentView.java │ │ │ │ │ ├── RatioImageView.java │ │ │ │ │ ├── ShareDialog.java │ │ │ │ │ ├── ShortcutLayout.java │ │ │ │ │ ├── ToggleView.java │ │ │ │ │ ├── WebviewEX.java │ │ │ │ │ ├── WrapContentHeightViewPager.java │ │ │ │ │ ├── expandableview │ │ │ │ │ ├── ExpandableLayout.java │ │ │ │ │ ├── ExpandableLayoutListener.java │ │ │ │ │ ├── ExpandableRelativeLayout.java │ │ │ │ │ ├── ExpandableSavedState.java │ │ │ │ │ └── Utils.java │ │ │ │ │ └── scheduleview │ │ │ │ │ ├── DotObj.java │ │ │ │ │ └── ScheduleView.java │ │ │ ├── plugin │ │ │ │ ├── CloudPluginManager.java │ │ │ │ ├── Common.java │ │ │ │ ├── LocalPluginManager.java │ │ │ │ ├── PluginDetailDialogFragment.java │ │ │ │ ├── SpaceItemDecoration.java │ │ │ │ ├── activity │ │ │ │ │ ├── LocalPluginInstallActivity.java │ │ │ │ │ └── PluginManagerActivity.java │ │ │ │ ├── adapter │ │ │ │ │ ├── CloudPluginAdapter.java │ │ │ │ │ ├── LocalPluginAdapter.java │ │ │ │ │ └── PluginPagerAdapter.java │ │ │ │ ├── fragment │ │ │ │ │ ├── CloudPluginFragment.java │ │ │ │ │ └── LocalPluginFragment.java │ │ │ │ ├── model │ │ │ │ │ ├── CloudPluginBean.java │ │ │ │ │ └── LocalPluginBean.java │ │ │ │ └── view │ │ │ │ │ └── FileSelectView.java │ │ │ ├── program │ │ │ │ ├── BindingHolder.java │ │ │ │ └── ItemMenuLayout.java │ │ │ ├── texteditor │ │ │ │ ├── AndroidCompat.java │ │ │ │ ├── ApplicationAdapter.java │ │ │ │ ├── BaseActivity.java │ │ │ │ ├── Bean.java │ │ │ │ ├── EditorActivity.java │ │ │ │ ├── FTPServerService.java │ │ │ │ ├── MFTPSettingActivity.java │ │ │ │ ├── MNApp.java │ │ │ │ ├── RunRules.java │ │ │ │ ├── TedAppWidgetProvider.java │ │ │ │ ├── TedFontActivity.java │ │ │ │ ├── TedFragment.java │ │ │ │ ├── TedOpenRecentActivity.java │ │ │ │ ├── TedSaveAsActivity.java │ │ │ │ ├── TedSettingsActivity.java │ │ │ │ ├── TedWidgetConfigActivity.java │ │ │ │ ├── androidlib │ │ │ │ │ ├── common │ │ │ │ │ │ ├── ChangeLog.java │ │ │ │ │ │ ├── MiscUtils.java │ │ │ │ │ │ └── UIUtils.java │ │ │ │ │ ├── comparator │ │ │ │ │ │ ├── ComparatorFilesAlpha.java │ │ │ │ │ │ ├── ComparatorFilesDate.java │ │ │ │ │ │ ├── ComparatorFilesSize.java │ │ │ │ │ │ └── ComparatorFilesType.java │ │ │ │ │ ├── data │ │ │ │ │ │ ├── FileUtils.java │ │ │ │ │ │ ├── MimeTypeMapEnhanced.java │ │ │ │ │ │ └── RootFileUtils.java │ │ │ │ │ └── ui │ │ │ │ │ │ ├── Toaster.java │ │ │ │ │ │ ├── activity │ │ │ │ │ │ ├── ActivityDecorator.java │ │ │ │ │ │ └── BrowsingActivity.java │ │ │ │ │ │ └── adapter │ │ │ │ │ │ ├── FileListAdapter.java │ │ │ │ │ │ └── ThumbnailProvider.java │ │ │ │ ├── common │ │ │ │ │ ├── CommonEnums.java │ │ │ │ │ ├── ComparatorFilesAlpha.java │ │ │ │ │ ├── Constants.java │ │ │ │ │ ├── FontUtils.java │ │ │ │ │ ├── RecentFiles.java │ │ │ │ │ ├── Settings.java │ │ │ │ │ ├── TedChangelog.java │ │ │ │ │ ├── TextFileUtils.java │ │ │ │ │ └── WidgetPrefs.java │ │ │ │ ├── newtexteditor │ │ │ │ │ ├── AfterTextChangeListener.java │ │ │ │ │ ├── EditableWithLayout.java │ │ │ │ │ ├── MyEditText.java │ │ │ │ │ ├── MyInputConnection.java │ │ │ │ │ ├── MyLayout.java │ │ │ │ │ ├── ScrollBar.java │ │ │ │ │ └── SpanBody.java │ │ │ │ ├── ui │ │ │ │ │ ├── adapter │ │ │ │ │ │ ├── FolderAdapter.java │ │ │ │ │ │ ├── FontListAdapter.java │ │ │ │ │ │ ├── MyViewHolder.java │ │ │ │ │ │ ├── PathListAdapter.java │ │ │ │ │ │ └── bean │ │ │ │ │ │ │ ├── FolderBean.java │ │ │ │ │ │ │ └── PopupItemBean.java │ │ │ │ │ └── view │ │ │ │ │ │ ├── AdvancedEditText.java │ │ │ │ │ │ ├── EditorPopUp.java │ │ │ │ │ │ ├── EnterDialog.java │ │ │ │ │ │ ├── MyEditTextPreference.java │ │ │ │ │ │ ├── MyItemDecoration.java │ │ │ │ │ │ ├── MyTouchHelperCallback.java │ │ │ │ │ │ └── TopSearchDialog.java │ │ │ │ ├── undo │ │ │ │ │ ├── TextChange.java │ │ │ │ │ ├── TextChangeDelete.java │ │ │ │ │ ├── TextChangeInsert.java │ │ │ │ │ └── TextChangeWatcher.java │ │ │ │ └── widget │ │ │ │ │ └── crouton │ │ │ │ │ ├── AnimationsBuilder.java │ │ │ │ │ ├── Crouton.java │ │ │ │ │ ├── Manager.java │ │ │ │ │ └── Style.java │ │ │ └── utils │ │ │ │ ├── CodePattern.java │ │ │ │ ├── DateTimeUtil.java │ │ │ │ ├── FileUtils.java │ │ │ │ ├── NoteBookAction.java │ │ │ │ ├── NotebookUtil.java │ │ │ │ ├── OpenWebUtil.java │ │ │ │ ├── SolfKeybroadUtil.java │ │ │ │ ├── UpdateHelper.java │ │ │ │ └── iap │ │ │ │ ├── IabBroadcastReceiver.java │ │ │ │ ├── IabException.java │ │ │ │ ├── IabHelper.java │ │ │ │ ├── IabResult.java │ │ │ │ ├── Inventory.java │ │ │ │ ├── Purchase.java │ │ │ │ ├── Security.java │ │ │ │ └── SkuDetails.java │ │ │ └── qpylib │ │ │ ├── MPyApi.java │ │ │ └── MPyService.java │ └── res │ │ ├── anim │ │ ├── fade_in.xml │ │ ├── fade_out.xml │ │ ├── slide_down.xml │ │ ├── slide_in_bottom.xml │ │ ├── slide_out_bottom.xml │ │ └── slide_up.xml │ │ ├── drawable-hdpi │ │ └── ic_launcher.png │ │ ├── drawable-mdpi │ │ └── ic_launcher.png │ │ ├── drawable-xxhdpi │ │ ├── aipy.png │ │ ├── aipy_light.png │ │ ├── arrow_up.png │ │ ├── arvr.png │ │ ├── arvr_light.png │ │ ├── basics.png │ │ ├── basics_light.png │ │ ├── btn_close_window.png │ │ ├── checked.png │ │ ├── database.png │ │ ├── database_light.png │ │ ├── download.png │ │ ├── editor_qrcode.png │ │ ├── empty.png │ │ ├── gist_editor.png │ │ ├── horizontal_separation_line.png │ │ ├── ic_about_mail.png │ │ ├── ic_about_new.png │ │ ├── ic_about_share.png │ │ ├── ic_add.png │ │ ├── ic_arrow_back.png │ │ ├── ic_arrow_back_white.png │ │ ├── ic_arrow_drop_down_a.png │ │ ├── ic_arrow_drop_down_b.png │ │ ├── ic_back.png │ │ ├── ic_cloud_done.png │ │ ├── ic_cloud_download.png │ │ ├── ic_cloud_list.png │ │ ├── ic_cloud_notdone.png │ │ ├── ic_cloud_upload.png │ │ ├── ic_com_comment.png │ │ ├── ic_com_copylink.png │ │ ├── ic_com_delete.png │ │ ├── ic_com_facebook.png │ │ ├── ic_com_like.png │ │ ├── ic_com_liked.png │ │ ├── ic_com_share.png │ │ ├── ic_com_sharecode.png │ │ ├── ic_com_twitter.png │ │ ├── ic_cou_share.png │ │ ├── ic_course_clicks.png │ │ ├── ic_delete.png │ │ ├── ic_editcode.png │ │ ├── ic_editcode_add.png │ │ ├── ic_editor_arrow_down.png │ │ ├── ic_editor_arrow_left.png │ │ ├── ic_editor_arrow_right.png │ │ ├── ic_editor_arrow_up.png │ │ ├── ic_editor_delete_name.png │ │ ├── ic_editor_file.png │ │ ├── ic_editor_file_little.png │ │ ├── ic_editor_filetree_close.png │ │ ├── ic_editor_folder.png │ │ ├── ic_editor_folder_little.png │ │ ├── ic_editor_gist.png │ │ ├── ic_editor_keyboard.png │ │ ├── ic_editor_keyboardlock.png │ │ ├── ic_editor_more_horiz.png │ │ ├── ic_editor_newfolder.png │ │ ├── ic_editor_next.png │ │ ├── ic_editor_open.png │ │ ├── ic_editor_recent.png │ │ ├── ic_editor_run.png │ │ ├── ic_editor_save.png │ │ ├── ic_editor_saveas.png │ │ ├── ic_editor_saveup.png │ │ ├── ic_editor_search.png │ │ ├── ic_editor_sharecode.png │ │ ├── ic_editor_snippet.png │ │ ├── ic_editor_undo.png │ │ ├── ic_editor_unknown.png │ │ ├── ic_editor_web.png │ │ ├── ic_edittext.png │ │ ├── ic_edittext_add.png │ │ ├── ic_file_rename.png │ │ ├── ic_folder_open.png │ │ ├── ic_gist.png │ │ ├── ic_go.png │ │ ├── ic_home_club.png │ │ ├── ic_home_course.png │ │ ├── ic_home_editor.png │ │ ├── ic_home_file.png │ │ ├── ic_home_gist.png │ │ ├── ic_home_library.png │ │ ├── ic_home_more.png │ │ ├── ic_home_program.png │ │ ├── ic_home_qpy_add.png │ │ ├── ic_home_qpyapp.png │ │ ├── ic_home_scan.png │ │ ├── ic_home_terminal.png │ │ ├── ic_ipynb.png │ │ ├── ic_keyboard_arrow_right_white.png │ │ ├── ic_keyboard_hide_black.png │ │ ├── ic_launcher.png │ │ ├── ic_library.png │ │ ├── ic_library_delete.png │ │ ├── ic_library_detail.png │ │ ├── ic_library_download.png │ │ ├── ic_library_install.png │ │ ├── ic_library_reinstall.png │ │ ├── ic_library_run.png │ │ ├── ic_library_upgrade.png │ │ ├── ic_login.png │ │ ├── ic_menu_preferences.png │ │ ├── ic_menu_windows.png │ │ ├── ic_more.png │ │ ├── ic_notebook.png │ │ ├── ic_open.png │ │ ├── ic_play.png │ │ ├── ic_program.png │ │ ├── ic_program_install.png │ │ ├── ic_project_console.png │ │ ├── ic_project_kivy.png │ │ ├── ic_project_kivy3.png │ │ ├── ic_project_qapp.png │ │ ├── ic_project_qapp3.png │ │ ├── ic_project_webapp.png │ │ ├── ic_project_webapp3.png │ │ ├── ic_pyfile_kivy.png │ │ ├── ic_pyfile_kivy3.png │ │ ├── ic_pyfile_qapp.png │ │ ├── ic_pyfile_qapp3.png │ │ ├── ic_pyfile_webapp.png │ │ ├── ic_pyfile_webapp3.png │ │ ├── ic_qpypi_download.png │ │ ├── ic_recent.png │ │ ├── ic_remove.png │ │ ├── ic_richpush_actionbar_back.png │ │ ├── ic_richpush_actionbar_divider.png │ │ ├── ic_right.png │ │ ├── ic_save1.png │ │ ├── ic_save2.png │ │ ├── ic_stepin.png │ │ ├── ic_tab2.png │ │ ├── ic_terminal.png │ │ ├── ic_thumb_up.png │ │ ├── ic_undo.png │ │ ├── ic_undo_2.png │ │ ├── ic_white_arrow_right.png │ │ ├── img_course.png │ │ ├── img_empty_net.png │ │ ├── img_emptycourse.png │ │ ├── img_home_bg.png │ │ ├── img_home_bg_land.png │ │ ├── img_home_logo.png │ │ ├── img_home_logo_3.png │ │ ├── img_homebar_bg.png │ │ ├── img_me_bg.png │ │ ├── mohu.png │ │ ├── panel_bg.9.png │ │ ├── prev.png │ │ ├── redo.png │ │ ├── scan_image.png │ │ ├── sorry.png │ │ ├── terminal_mini_icon.png │ │ ├── textfield_black.9.png │ │ ├── textfield_dracula.9.png │ │ ├── textfield_matrix.9.png │ │ ├── textfield_sky.9.png │ │ ├── textfield_white.9.png │ │ ├── transparent.png │ │ ├── undo.png │ │ ├── up.png │ │ ├── web.png │ │ └── web_light.png │ │ ├── drawable │ │ ├── bg_item.xml │ │ ├── bg_layout.xml │ │ ├── close_background.xml │ │ ├── corners_5_white_bg.xml │ │ ├── edit_text_background.xml │ │ ├── edit_text_cursor.xml │ │ ├── edit_text_green_bg.xml │ │ ├── gray_btn_rect.xml │ │ ├── gray_line_btn_bg.xml │ │ ├── green_btn_bg.xml │ │ ├── green_btn_rect.xml │ │ ├── green_dot_shape.xml │ │ ├── green_gray_btn.xml │ │ ├── green_rect_line.xml │ │ ├── ic_check_circle.xml │ │ ├── ic_clear_24dp.xml │ │ ├── ic_right_a.xml │ │ ├── notebook_checkbox.xml │ │ ├── purchase_bg.xml │ │ ├── richpush_btn_selector.xml │ │ ├── rotate_arrow.xml │ │ ├── select_green_text.xml │ │ ├── select_tab_indicator.xml │ │ ├── silver_button.xml │ │ ├── star_selector.xml │ │ ├── toolbar_button_bg.xml │ │ ├── white_dot_shape.xml │ │ ├── white_rect_stroke.xml │ │ ├── widget_title_background.xml │ │ └── yellow_bg_thumbs_up.xml │ │ ├── layout-land │ │ └── activity_main.xml │ │ ├── layout-v11 │ │ └── widget.xml │ │ ├── layout-v14 │ │ └── buttons_ok_cancel.xml │ │ ├── layout │ │ ├── about.xml │ │ ├── about_generic.xml │ │ ├── activity_about.xml │ │ ├── activity_add_gist.xml │ │ ├── activity_code_detail.xml │ │ ├── activity_code_share.xml │ │ ├── activity_community.xml │ │ ├── activity_course.xml │ │ ├── activity_course_crowdfunding.xml │ │ ├── activity_course_index.xml │ │ ├── activity_free_course.xml │ │ ├── activity_ftp.xml │ │ ├── activity_funding_purchase.xml │ │ ├── activity_lib.xml │ │ ├── activity_local_app.xml │ │ ├── activity_local_plugin_install.xml │ │ ├── activity_main.xml │ │ ├── activity_my_share.xml │ │ ├── activity_news_detail.xml │ │ ├── activity_notebook.xml │ │ ├── activity_notebooklist.xml │ │ ├── activity_plugin_manager.xml │ │ ├── activity_purchase.xml │ │ ├── activity_qrcode.xml │ │ ├── activity_qwebview.xml │ │ ├── activity_setting.xml │ │ ├── activity_sign_in.xml │ │ ├── activity_splash.xml │ │ ├── activity_user.xml │ │ ├── buttons_ok_cancel.xml │ │ ├── dialog__setting_notebook.xml │ │ ├── dialog_code_review.xml │ │ ├── dialog_enter.xml │ │ ├── dialog_feedback.xml │ │ ├── dialog_history.xml │ │ ├── dialog_loading.xml │ │ ├── dialog_share.xml │ │ ├── drawer_editor.xml │ │ ├── fragment_course.xml │ │ ├── fragment_explorer.xml │ │ ├── fragment_local.xml │ │ ├── fragment_my_course.xml │ │ ├── fragment_my_share.xml │ │ ├── fragment_plugin_cloud.xml │ │ ├── fragment_plugin_local.xml │ │ ├── fragment_qpy_pi.xml │ │ ├── fragment_refresh_rv.xml │ │ ├── fragment_rv.xml │ │ ├── header_last_refresh_time.xml │ │ ├── header_lib_description.xml │ │ ├── header_lib_install.xml │ │ ├── item_app_list.xml │ │ ├── item_comment.xml │ │ ├── item_course.xml │ │ ├── item_course_funding_index.xml │ │ ├── item_course_index.xml │ │ ├── item_file.xml │ │ ├── item_folder.xml │ │ ├── item_folder_little.xml │ │ ├── item_lib_list.xml │ │ ├── item_my_course.xml │ │ ├── item_notebook.xml │ │ ├── item_plugin_cloud.xml │ │ ├── item_plugin_local.xml │ │ ├── item_pop_up.xml │ │ ├── item_price.xml │ │ ├── item_run_program.xml │ │ ├── item_share_code.xml │ │ ├── item_square_img.xml │ │ ├── jpush_popwin_layout.xml │ │ ├── jpush_webview_layout.xml │ │ ├── layout_about.xml │ │ ├── layout_editor.xml │ │ ├── layout_open.xml │ │ ├── layout_prefs.xml │ │ ├── layout_save_as.xml │ │ ├── layout_toolbar.xml │ │ ├── layout_widget_config.xml │ │ ├── list_file_item.xml │ │ ├── new_rule_dialog.xml │ │ ├── popup_add_editor.xml │ │ ├── run_rules.xml │ │ ├── rv_item_news.xml │ │ ├── rv_item_news_comment.xml │ │ ├── rv_item_news_head.xml │ │ ├── search.xml │ │ ├── search_top.xml │ │ ├── snippet_list_row.xml │ │ ├── tabs.xml │ │ ├── term_activity.xml │ │ ├── view_stub_save_prompt.xml │ │ ├── widget.xml │ │ ├── widget_banner.xml │ │ ├── widget_editor_control.xml │ │ ├── widget_no_net.xml │ │ ├── widget_save.xml │ │ ├── widget_send_comment.xml │ │ ├── widget_shortcut.xml │ │ ├── widget_shortcut_btn.xml │ │ ├── widget_shortcut_imgbtn.xml │ │ ├── window_list_item.xml │ │ └── window_list_new_window.xml │ │ ├── menu │ │ ├── about_menu.xml │ │ ├── activity_console_menu.xml │ │ ├── comment_menu.xml │ │ ├── community_menu.xml │ │ ├── editor_menu.xml │ │ ├── log_menu.xml │ │ ├── news_menu.xml │ │ ├── notebook_menu.xml │ │ ├── plugin_installed_menu.xml │ │ ├── plugin_uninstalled_menu.xml │ │ ├── plugin_update_menu.xml │ │ ├── qr_menu.xml │ │ └── refresh_menu.xml │ │ ├── raw │ │ ├── beep.ogg │ │ ├── keep.xml │ │ ├── projects2.zip │ │ ├── projects3.zip │ │ ├── scripts2.zip │ │ └── scripts3.zip │ │ ├── values-ja │ │ ├── arrays.xml │ │ ├── strings.xml │ │ └── toasts.xml │ │ ├── values-ru │ │ ├── arrays.xml │ │ └── strings.xml │ │ ├── values-v11 │ │ ├── dimens.xml │ │ └── styles.xml │ │ ├── values-v21 │ │ ├── colors.xml │ │ └── styles.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ ├── values-zh-rCN │ │ ├── arrays.xml │ │ ├── strings.xml │ │ └── toasts.xml │ │ ├── values-zh-rTW │ │ ├── strings.xml │ │ └── toasts.xml │ │ ├── values │ │ ├── arrays.xml │ │ ├── arraysNoLocalize.xml │ │ ├── attrs.xml │ │ ├── colors.xml │ │ ├── defaults.xml │ │ ├── dimens.xml │ │ ├── history.xml │ │ ├── id.xml │ │ ├── ids.xml │ │ ├── jpush_style.xml │ │ ├── selectable_item_selector_colors.xml │ │ ├── string_program_explorer.xml │ │ ├── strings.xml │ │ ├── strings_activity_settings.xml │ │ ├── strings_plugin_manager.xml │ │ ├── styles.xml │ │ ├── textview_attrs.xml │ │ ├── textview_dimens.xml │ │ ├── textview_material_dimens.xml │ │ ├── textview_styles.xml │ │ └── toasts.xml │ │ └── xml │ │ ├── console_preferences.xml │ │ ├── network_security_config.xml │ │ ├── qpython_setting.xml │ │ ├── shortcuts.xml │ │ └── ted_prefs.xml │ ├── oh │ ├── AndroidManifest.xml │ ├── java │ │ └── org │ │ │ └── qpython │ │ │ └── qpy │ │ │ ├── main │ │ │ ├── activity │ │ │ │ ├── BaseActivity.java │ │ │ │ ├── FundingPurchaseActivity.java │ │ │ │ ├── PayActivity.java │ │ │ │ ├── PurchaseActivity.java │ │ │ │ ├── SignInActivity.java │ │ │ │ └── UserActivity.java │ │ │ ├── app │ │ │ │ └── AppInit.java │ │ │ ├── fragment │ │ │ │ ├── ExplorerFragment.java │ │ │ │ └── MyProjectFragment.java │ │ │ └── service │ │ │ │ └── PayUtil.java │ │ │ ├── sharecode │ │ │ ├── ShareCodeUtil.java │ │ │ └── pojo │ │ │ │ └── CloudFile.java │ │ │ └── texteditor │ │ │ └── TedLocalActivity.java │ └── res │ │ ├── drawable-xxhdpi │ │ └── ic_login.png │ │ ├── layout │ │ └── activity_local.xml │ │ ├── values-zh-rCN │ │ └── strings.xml │ │ ├── values-zh-rTW │ │ └── strings.xml │ │ └── values │ │ └── strings.xml │ ├── ol │ ├── AndroidManifest.xml │ ├── java │ │ └── org │ │ │ └── qpython │ │ │ └── qpy │ │ │ ├── codeshare │ │ │ ├── ShareCodeUtil.java │ │ │ └── pojo │ │ │ │ └── CloudFile.java │ │ │ ├── main │ │ │ ├── PayActivity.java │ │ │ ├── activity │ │ │ │ ├── BaseActivity.java │ │ │ │ ├── FundingPurchaseActivity.java │ │ │ │ ├── PayActivity.java │ │ │ │ ├── PurchaseActivity.java │ │ │ │ ├── SignInActivity.java │ │ │ │ └── UserActivity.java │ │ │ ├── app │ │ │ │ └── AppInit.java │ │ │ ├── fragment │ │ │ │ ├── ExplorerFragment.java │ │ │ │ └── MyProjectFragment.java │ │ │ ├── receiver │ │ │ │ └── LeancloudReceiver.java │ │ │ └── service │ │ │ │ ├── MyFirebaseInstanceIDService.java │ │ │ │ ├── MyFirebaseMessagingService.java │ │ │ │ └── PayUtil.java │ │ │ └── texteditor │ │ │ └── TedLocalActivity.java │ └── res │ │ ├── layout │ │ └── activity_local.xml │ │ ├── values-zh-rCN │ │ └── strings.xml │ │ └── values │ │ └── strings.xml │ ├── op │ ├── AndroidManifest.xml │ ├── java │ │ └── org │ │ │ └── qpython │ │ │ └── qpy │ │ │ ├── main │ │ │ ├── activity │ │ │ │ ├── BaseActivity.java │ │ │ │ ├── FundingPurchaseActivity.java │ │ │ │ ├── PayActivity.java │ │ │ │ ├── PurchaseActivity.java │ │ │ │ ├── SignInActivity.java │ │ │ │ └── UserActivity.java │ │ │ ├── app │ │ │ │ └── AppInit.java │ │ │ ├── fragment │ │ │ │ ├── ExplorerFragment.java │ │ │ │ └── MyProjectFragment.java │ │ │ └── service │ │ │ │ └── PayUtil.java │ │ │ ├── sharecode │ │ │ ├── ShareCodeUtil.java │ │ │ └── pojo │ │ │ │ └── CloudFile.java │ │ │ └── texteditor │ │ │ └── TedLocalActivity.java │ └── res │ │ ├── drawable-xxhdpi │ │ └── ic_login.png │ │ ├── layout │ │ └── activity_local.xml │ │ ├── values-zh-rCN │ │ └── strings.xml │ │ ├── values-zh-rTW │ │ └── strings.xml │ │ └── values │ │ └── strings.xml │ └── os │ ├── AndroidManifest.xml │ ├── java │ └── org │ │ └── qpython │ │ └── qpy │ │ ├── codeshare │ │ ├── ShareCodeUtil.java │ │ └── pojo │ │ │ └── CloudFile.java │ │ ├── main │ │ ├── PayActivity.java │ │ ├── activity │ │ │ ├── BaseActivity.java │ │ │ ├── FundingPurchaseActivity.java │ │ │ ├── PayActivity.java │ │ │ ├── PurchaseActivity.java │ │ │ ├── SignInActivity.java │ │ │ └── UserActivity.java │ │ ├── app │ │ │ └── AppInit.java │ │ ├── fragment │ │ │ ├── ExplorerFragment.java │ │ │ └── MyProjectFragment.java │ │ ├── receiver │ │ │ └── LeancloudReceiver.java │ │ └── service │ │ │ ├── MyFirebaseInstanceIDService.java │ │ │ ├── MyFirebaseMessagingService.java │ │ │ └── PayUtil.java │ │ └── texteditor │ │ └── TedLocalActivity.java │ └── res │ ├── layout │ └── activity_local.xml │ ├── values-zh-rCN │ └── strings.xml │ └── values │ └── strings.xml ├── settings.gradle ├── termemulator ├── build.gradle └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── jackpal │ │ └── androidterm │ │ └── emulatorview │ │ ├── BaseTextRenderer.java │ │ ├── Bitmap4x8FontRenderer.java │ │ ├── ByteQueue.java │ │ ├── ColorScheme.java │ │ ├── EmulatorDebug.java │ │ ├── EmulatorView.java │ │ ├── GrowableIntArray.java │ │ ├── HistoryCmdUtils.java │ │ ├── PaintRenderer.java │ │ ├── Screen.java │ │ ├── ShortcutBean.java │ │ ├── StyleRow.java │ │ ├── TermKeyListener.java │ │ ├── TermSession.java │ │ ├── TermShortcutLayout.java │ │ ├── TerminalEmulator.java │ │ ├── TextRenderer.java │ │ ├── TextStyle.java │ │ ├── TranscriptScreen.java │ │ ├── UnicodeTranscript.java │ │ ├── UpdateCallback.java │ │ └── compat │ │ ├── AndroidCharacterCompat.java │ │ ├── AndroidCompat.java │ │ ├── ClipboardManagerCompat.java │ │ ├── ClipboardManagerCompatFactory.java │ │ ├── ClipboardManagerCompatV1.java │ │ ├── ClipboardManagerCompatV11.java │ │ ├── KeyCharacterMapCompat.java │ │ ├── KeycodeConstants.java │ │ └── Patterns.java │ └── res │ ├── drawable-nodpi │ └── atari_small_nodpi.png │ ├── drawable-xxhdpi │ ├── ic_terminal_history.png │ ├── tab1.png │ └── tab2.png │ ├── drawable │ └── atari_small.png │ ├── layout │ ├── widget_shortcut_btn.xml │ └── widget_shortcut_imgbtn.xml │ └── values │ └── arrays.xml ├── termexec ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── jackpal │ │ └── androidterm │ │ └── libtermexec │ │ └── ApplicationTest.java │ └── main │ ├── AndroidManifest.xml │ ├── aidl │ └── jackpal │ │ └── androidterm │ │ └── libtermexec │ │ └── v1 │ │ └── ITerminal.aidl │ ├── java │ └── jackpal │ │ └── androidterm │ │ └── TermExec.java │ └── jni │ ├── Android.mk │ ├── Application.mk │ ├── common.cpp │ ├── common.h │ ├── fileCompat.cpp │ ├── fileCompat.h │ ├── process.cpp │ ├── process.h │ ├── termExec.cpp │ └── termExec.h └── utils ├── copy.sh └── diff.sh /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | patreon: riverfor 4 | custom: ["https://paypal.me/qpyriver"] 5 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | build 4 | __MACOSX 5 | .idea 6 | keystore 7 | .DS_Store 8 | local.properties 9 | *.apk 10 | qbaselib.iml 11 | .* 12 | !/.gitignore 13 | gradle-wrapper.properties 14 | Android.mk 15 | qpython/src/main/jni/python/libpython2.7.b 16 | qpysdk/src/main/obj 17 | values-fr 18 | values-tr 19 | build.gradle.new 20 | captures 21 | old.git 22 | qpython/qpython.key 23 | qpython/cn/release/output.json 24 | qpython/od/release/* 25 | qpython/cn 26 | qpython/google 27 | qpython/os 28 | qpython/ol 29 | qpython/op 30 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "qbaselib"] 2 | path = qbaselib 3 | url = git@github.com:qpython-android/qbaselib.git 4 | [submodule "qftplib"] 5 | path = qftplib 6 | url = git@github.com:qpython-android/qftplib.git 7 | [submodule "qpysdk/src/main/jni"] 8 | path = qpysdk/src/main/jni 9 | url = git@github.com:qpython-android/pygamesdl2-jni.git 10 | [submodule "qpysl4a"] 11 | path = qpysl4a 12 | url = git@github.com:qpython-android/qpysl4a.git 13 | -------------------------------------------------------------------------------- /debug.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/debug.keystore -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # About 2 | QPython documentation 3 | -------------------------------------------------------------------------------- /docs/qpyqrcode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/docs/qpyqrcode.png -------------------------------------------------------------------------------- /docs/wx-contact-river.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/docs/wx-contact-river.png -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | ## Project-wide Gradle settings. 2 | # 3 | # For more details on how to configure your build environment visit 4 | # http://www.gradle.org/docs/current/userguide/build_environment.html 5 | # 6 | # Specifies the JVM arguments used for the daemon process. 7 | # The setting is particularly useful for tweaking memory settings. 8 | # Default value: -Xmx1024m -XX:MaxPermSize=256m 9 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 10 | # 11 | # When configured, Gradle will run in incubating parallel mode. 12 | # This option should only be used with decoupled projects. More details, visit 13 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 14 | # org.gradle.parallel=true 15 | #Sun May 29 21:58:12 CST 2016 16 | org.gradle.jvmargs=-Xmx2048m 17 | org.gradle.daemon=true 18 | android.debug.obsoleteApi=true 19 | #android.useDeprecatedNdk=true 20 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /local.properties: -------------------------------------------------------------------------------- 1 | ## This file must *NOT* be checked into Version Control Systems, 2 | # as it contains information specific to your local configuration. 3 | # 4 | # Location of the SDK. This is only used by Gradle. 5 | # For customization when using a Version Control System, please read the 6 | # header note. 7 | #Thu Aug 02 10:23:49 CST 2018 8 | ndk.dir=/Users/yanhecun/Library/Android/sdk/ndk-bundle 9 | sdk.dir=/Users/yanhecun/Library/Android/sdk 10 | -------------------------------------------------------------------------------- /qpypluginman/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | 3 | android { 4 | compileSdkVersion rootProject.ext.compileSdkVersion 5 | 6 | defaultConfig { 7 | minSdkVersion rootProject.ext.minSdkVersion 8 | targetSdkVersion rootProject.ext.targetSdkVersion 9 | versionCode 1 10 | versionName "1.0" 11 | } 12 | buildTypes { 13 | release { 14 | minifyEnabled false 15 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 16 | } 17 | } 18 | lintOptions { 19 | abortOnError false 20 | } 21 | } 22 | 23 | dependencies { 24 | // api fileTree(include: ['*.jar'], dir: 'libs') 25 | //testApi 'junit:junit:4.12' 26 | api rootProject.ext.libOkHttp3 27 | api rootProject.ext.libRxJava 28 | api rootProject.ext.libRxAndroid 29 | api rootProject.ext.libFileDownloaderLib 30 | api rootProject.ext.libSupportV4 31 | } 32 | -------------------------------------------------------------------------------- /qpypluginman/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in C:\Users\Jay\AppData\Local\Android\Sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include mPath and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /qpypluginman/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /qpypluginman/src/main/java/com/quseit/common/updater/convertor/Convertor.java: -------------------------------------------------------------------------------- 1 | package com.quseit.common.updater.convertor; 2 | 3 | 4 | import com.quseit.common.updater.updatepkg.UpdatePackage; 5 | 6 | import java.util.List; 7 | 8 | public interface Convertor { 9 | List transform(String response); 10 | } 11 | -------------------------------------------------------------------------------- /qpypluginman/src/main/java/com/quseit/common/updater/downloader/Downloader.java: -------------------------------------------------------------------------------- 1 | package com.quseit.common.updater.downloader; 2 | 3 | import java.io.File; 4 | 5 | public interface Downloader { 6 | void download(String name, String url, Callback callback); 7 | 8 | void download(String name, String url, String savePath, Callback callback); 9 | 10 | interface Callback { 11 | void pending(String name); 12 | void complete(String name, File installer); 13 | void error(String err); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /qpypluginman/src/main/java/com/quseit/common/updater/service/DefaultService.java: -------------------------------------------------------------------------------- 1 | package com.quseit.common.updater.service; 2 | 3 | import java.io.IOException; 4 | 5 | import okhttp3.OkHttpClient; 6 | import okhttp3.Request; 7 | 8 | public class DefaultService implements Service { 9 | private final OkHttpClient client; 10 | 11 | public DefaultService() { 12 | client = new OkHttpClient(); 13 | } 14 | 15 | @Override 16 | public String request(String url) throws IOException { 17 | Request request = new Request.Builder() 18 | .url(url) 19 | .build(); 20 | return client.newCall(request).execute().body().string(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /qpypluginman/src/main/java/com/quseit/common/updater/service/Service.java: -------------------------------------------------------------------------------- 1 | package com.quseit.common.updater.service; 2 | 3 | import java.io.IOException; 4 | 5 | public interface Service { 6 | String request(String url) throws IOException; 7 | } 8 | -------------------------------------------------------------------------------- /qpypluginman/src/main/java/com/quseit/common/updater/updatepkg/UpdatePackage.java: -------------------------------------------------------------------------------- 1 | package com.quseit.common.updater.updatepkg; 2 | 3 | import java.io.File; 4 | 5 | public interface UpdatePackage { 6 | 7 | String getName(); 8 | 9 | String getVersion(); 10 | 11 | String getVersionDescription(); 12 | 13 | String getDownloadUrl(); 14 | 15 | boolean checkVersion(); 16 | 17 | void install(File file); 18 | } 19 | -------------------------------------------------------------------------------- /qpypluginman/src/main/res/drawable/ic_cloud_download_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpypluginman/src/main/res/drawable/ic_cloud_download_black_24dp.png -------------------------------------------------------------------------------- /qpypluginman/src/main/res/values-zh-rCn/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 检查更新失败 3 | 您的应用已经是最新版本 4 | 应用有更新 5 | 更新 6 | 显示详情 7 | 取消 8 | 正在下载 9 | 下载完成 10 | 11 | 12 | -------------------------------------------------------------------------------- /qpypluginman/src/main/res/values-zh-rTW/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 檢查更新失敗 3 | 已經更新 4 | 提示 5 | 有可使用的新版本 6 | 更新 7 | 顯示詳細內容 8 | 取消 9 | 正在下載 10 | 已下載 11 | 12 | -------------------------------------------------------------------------------- /qpypluginman/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Check update fail 3 | Already update 4 | New version available 5 | Update 6 | Show detail 7 | Cancel 8 | Downloading 9 | Completed 10 | 11 | 12 | -------------------------------------------------------------------------------- /qpysdk/README: -------------------------------------------------------------------------------- 1 | QPYTHON SDK 2 | -------------------------------------------------------------------------------- /qpysdk/libs/locale_platform.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpysdk/libs/locale_platform.jar -------------------------------------------------------------------------------- /qpysdk/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /Users/yhc/Library/Android/sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include mPath and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /qpysdk/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /qpysdk/src/main/assets/android.js: -------------------------------------------------------------------------------- 1 | var AndroidHelper = function() { 2 | this._callbacks = [], 3 | this._id = 0, 4 | this._call = function(method, params) { 5 | this._id += 1; 6 | var request = JSON.stringify({'id': this._id, 'method': method, 'params': params}); 7 | var response = _rpc_wrapper.call(request); 8 | return eval("(" + response + ")"); 9 | }, 10 | 11 | this.registerCallback = function(event, receiver) { 12 | var id = this._callbacks.push(receiver) - 1; 13 | _callback_wrapper.register(event, id); 14 | }, 15 | 16 | this._callback = function(id, data) { 17 | var receiver = this._callbacks[id]; 18 | receiver(data); 19 | }, 20 | 21 | this.dismiss = function() { 22 | _rpc_wrapper.dismiss(); 23 | } 24 | }; 25 | -------------------------------------------------------------------------------- /qpysdk/src/main/assets/html/index.js: -------------------------------------------------------------------------------- 1 | var total = 0 2 | function gotoApp() { 3 | total = total+1 4 | if (total>=10) { 5 | //setTimeout('milib.closeWait()',100); 6 | $('#mainEle').html('
Fail to start QPyWebapp, please check manually.
'); 7 | milib.onNext("timeout"); 8 | 9 | } else { 10 | if (milib.isSrvOk("")) { 11 | setTimeout('window.location=milib.getSrv()',100); 12 | } else { 13 | if (total<15) { 14 | setTimeout('gotoApp()',3000); 15 | } 16 | } 17 | } 18 | } 19 | 20 | { 21 | $('#mainEle').html('
   
'); 22 | //milib.showWait(); 23 | milib.loadConsole(""); 24 | 25 | gotoApp(); 26 | 27 | /*var droid = new AndroidHelper(); 28 | droid.makeToast('HelloWorld')*/ 29 | } 30 | -------------------------------------------------------------------------------- /qpysdk/src/main/assets/stylesheets/css/sticky-footer.css: -------------------------------------------------------------------------------- 1 | /* Sticky footer styles 2 | -------------------------------------------------- */ 3 | html { 4 | position: relative; 5 | min-height: 100%; 6 | } 7 | body { 8 | margin-bottom: 60px; /* Margin bottom by footer height */ 9 | } 10 | .footer { 11 | position: absolute; 12 | bottom: 0; 13 | width: 100%; 14 | height: 60px; /* Set the fixed height of the footer here */ 15 | line-height: 60px; /* Vertically center the text there */ 16 | background-color: #f5f5f5; 17 | } 18 | 19 | 20 | /* Custom page CSS 21 | -------------------------------------------------- */ 22 | /* Not required for template or sticky footer method. */ 23 | 24 | .container { 25 | width: auto; 26 | max-width: 680px; 27 | padding: 0 15px; 28 | } 29 | -------------------------------------------------------------------------------- /qpysdk/src/main/java/org/renpy/android/Constants.java: -------------------------------------------------------------------------------- 1 | package org.renpy.android; 2 | 3 | public class Constants { 4 | // Used by the google play store. 5 | // public static String PLAY_BASE64_PUBLIC_KEY = "{{ config.google_play_key }}"; 6 | // public static byte[] PLAY_SALT = new byte[] { {{ config.google_play_salt }} }; 7 | // 8 | // // Used by the expansion downloader. 9 | // public static int fileVersion = {{ config.numeric_version }}; 10 | // public static int fileSize = {{ file_size }}; 11 | 12 | // Used by the in-app purchasing code. 13 | public static String store = "{{ config.store }}"; 14 | } 15 | -------------------------------------------------------------------------------- /qpysdk/src/main/java/org/renpy/android/GenericBroadcastReceiver.java: -------------------------------------------------------------------------------- 1 | package org.renpy.android; 2 | 3 | import android.content.BroadcastReceiver; 4 | import android.content.Intent; 5 | import android.content.Context; 6 | 7 | public class GenericBroadcastReceiver extends BroadcastReceiver { 8 | 9 | GenericBroadcastReceiverCallback listener; 10 | 11 | public GenericBroadcastReceiver(GenericBroadcastReceiverCallback listener) { 12 | super(); 13 | this.listener = listener; 14 | } 15 | 16 | public void onReceive(Context context, Intent intent) { 17 | this.listener.onReceive(context, intent); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /qpysdk/src/main/java/org/renpy/android/GenericBroadcastReceiverCallback.java: -------------------------------------------------------------------------------- 1 | package org.renpy.android; 2 | 3 | import android.content.Intent; 4 | import android.content.Context; 5 | 6 | public interface GenericBroadcastReceiverCallback { 7 | void onReceive(Context context, Intent intent); 8 | }; 9 | -------------------------------------------------------------------------------- /qpysdk/src/main/libs/armeabi-v7a/libSDL2.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpysdk/src/main/libs/armeabi-v7a/libSDL2.so -------------------------------------------------------------------------------- /qpysdk/src/main/libs/armeabi-v7a/libSDL2_gfx.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpysdk/src/main/libs/armeabi-v7a/libSDL2_gfx.so -------------------------------------------------------------------------------- /qpysdk/src/main/libs/armeabi-v7a/libSDL2_image.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpysdk/src/main/libs/armeabi-v7a/libSDL2_image.so -------------------------------------------------------------------------------- /qpysdk/src/main/libs/armeabi-v7a/libSDL2_mixer.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpysdk/src/main/libs/armeabi-v7a/libSDL2_mixer.so -------------------------------------------------------------------------------- /qpysdk/src/main/libs/armeabi-v7a/libSDL2_ttf.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpysdk/src/main/libs/armeabi-v7a/libSDL2_ttf.so -------------------------------------------------------------------------------- /qpysdk/src/main/libs/armeabi-v7a/libmain.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpysdk/src/main/libs/armeabi-v7a/libmain.so -------------------------------------------------------------------------------- /qpysdk/src/main/libs/armeabi-v7a/libpng16.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpysdk/src/main/libs/armeabi-v7a/libpng16.so -------------------------------------------------------------------------------- /qpysdk/src/main/libs/armeabi-v7a/libpython2.7.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpysdk/src/main/libs/armeabi-v7a/libpython2.7.so -------------------------------------------------------------------------------- /qpysdk/src/main/libs/armeabi-v7a/libqpysdk.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpysdk/src/main/libs/armeabi-v7a/libqpysdk.so -------------------------------------------------------------------------------- /qpysdk/src/main/res/drawable/presplash2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpysdk/src/main/res/drawable/presplash2.jpg -------------------------------------------------------------------------------- /qpysdk/src/main/res/values-zh-rCN/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | QPYSDK 3 | 查看日志么? 4 | 5 | -------------------------------------------------------------------------------- /qpysdk/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | QPYSDK 3 | Do you want to check the runtime log? 4 | -------------------------------------------------------------------------------- /qpython/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /qpython/libs/android-async-http-1.4.8.aar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/libs/android-async-http-1.4.8.aar -------------------------------------------------------------------------------- /qpython/libs/markdown4j.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/libs/markdown4j.jar -------------------------------------------------------------------------------- /qpython/release/cn/release/output.json: -------------------------------------------------------------------------------- 1 | [{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":241},"path":"Qpython_2018-02-28_cn.apk","properties":{"packageId":"com.hipipal.qpyplus","split":"","minSdkVersion":"14"}}] -------------------------------------------------------------------------------- /qpython/release/output.json: -------------------------------------------------------------------------------- 1 | [{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":229},"path":"qpython-release.apk","properties":{"packageId":"org.qpython.qpy","split":"","minSdkVersion":"14"}}] -------------------------------------------------------------------------------- /qpython/src/lint.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /qpython/src/main/assets/Apache_License: -------------------------------------------------------------------------------- 1 | """ 2 | Copyright [yyyy] [name of copyright owner] 3 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); 5 | you may not use this file except in compliance with the License. 6 | You may obtain a copy of the License at 7 | 8 | http://www.apache.org/licenses/LICENSE-2.0 9 | 10 | Unless required by applicable law or agreed to in writing, software 11 | distributed under the License is distributed on an "AS IS" BASIS, 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | See the License for the specific language governing permissions and 14 | limitations under the License. 15 | """ -------------------------------------------------------------------------------- /qpython/src/main/assets/QPy_ConsoleApp: -------------------------------------------------------------------------------- 1 | #-*-coding:utf8;-*- 2 | #qpy:console 3 | 4 | print "This is console module" 5 | -------------------------------------------------------------------------------- /qpython/src/main/assets/QPy_PygameApp: -------------------------------------------------------------------------------- 1 | #-*-coding:utf8;-*- 2 | #qpy:pygame 3 | 4 | import sys 5 | import pygame 6 | from pygame.locals import * 7 | 8 | pygame.init() 9 | # Resolution is ignored on Android 10 | surface = pygame.display.set_mode((640, 480)) 11 | # Only one built in font is available on Android 12 | myfont = pygame.font.SysFont("DejaVuSans", 64) 13 | label = myfont.render("Hello, QPython!", 1, (255, 255, 255)) 14 | clock = pygame.time.Clock() 15 | 16 | while True: 17 | for ev in pygame.event.get(): 18 | if ev.type == QUIT: 19 | pygame.quit() 20 | # Framelimiter 21 | clock.tick(60) 22 | surface.fill((0, 0, 0)) 23 | surface.blit(label, (0, 0)) 24 | pygame.display.flip() 25 | -------------------------------------------------------------------------------- /qpython/src/main/assets/Untitled.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [] 9 | } 10 | ], 11 | "metadata": {}, 12 | "nbformat": 4, 13 | "nbformat_minor": 2 14 | } 15 | -------------------------------------------------------------------------------- /qpython/src/main/assets/ipynb.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/assets/ipynb.mp3 -------------------------------------------------------------------------------- /qpython/src/main/assets/notebook3.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/assets/notebook3.mp3 -------------------------------------------------------------------------------- /qpython/src/main/assets/private1.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/assets/private1.mp3 -------------------------------------------------------------------------------- /qpython/src/main/assets/private2.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/assets/private2.mp3 -------------------------------------------------------------------------------- /qpython/src/main/assets/private3.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/assets/private3.mp3 -------------------------------------------------------------------------------- /qpython/src/main/assets/private31.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/assets/private31.mp3 -------------------------------------------------------------------------------- /qpython/src/main/assets/private32.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/assets/private32.mp3 -------------------------------------------------------------------------------- /qpython/src/main/assets/private33.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/assets/private33.mp3 -------------------------------------------------------------------------------- /qpython/src/main/assets/public.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/assets/public.mp3 -------------------------------------------------------------------------------- /qpython/src/main/assets/public3.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/assets/public3.mp3 -------------------------------------------------------------------------------- /qpython/src/main/assets/syntax/json.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | [-]?\d+([.]\d*)?([eE][+-]?\d+)? 14 | 15 | 16 | 17 | " 18 | " 19 | 20 | 21 | 22 | : 23 | 24 | 25 | true 26 | false 27 | null 28 | 29 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/codeshare/CONSTANT.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.codeshare; 2 | 3 | 4 | public class CONSTANT { 5 | public static final String IS_UPLOAD_INIT = "is_upload_init";// 是否同步了云端文件名 6 | public static final String CLOUDED_MAP = "clouded_map";// 云端文件名路径MAP 7 | public static final String DOT_REPLACE = "_%"; // Firebase Database中"." & "/" 等为非法字符无法上传, 需转义 8 | public static final String SLASH_REPLACE = "-%"; 9 | } 10 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/console/compont/MenuItemCompat.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.console.compont; 2 | 3 | import android.view.MenuItem; 4 | 5 | import org.qpython.qpysdk.utils.AndroidCompat; 6 | 7 | /** 8 | * Definitions related to android.view.MenuItem 9 | */ 10 | public class MenuItemCompat { 11 | public static final int SHOW_AS_ACTION_NEVER = 0; 12 | public static final int SHOW_AS_ACTION_IF_ROOM = 1; 13 | public static final int SHOW_AS_ACTION_ALWAYS = 2; 14 | public static final int SHOW_AS_ACTION_WITH_TEXT = 4; 15 | 16 | private static class Api11OrLater { 17 | public static void setShowAsAction(MenuItem item, int actionEnum) { 18 | item.setShowAsAction(actionEnum); 19 | } 20 | } 21 | 22 | public static void setShowAsAction(MenuItem item, int actionEnum) { 23 | if (AndroidCompat.SDK >= 11) { 24 | Api11OrLater.setShowAsAction(item, actionEnum); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/activity/FTPActivity.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.activity; 2 | 3 | import android.app.Activity; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | import android.database.DatabaseUtils; 7 | import android.databinding.DataBindingUtil; 8 | import android.os.Bundle; 9 | import android.support.annotation.Nullable; 10 | 11 | import org.qpython.qpy.R; 12 | import org.qpython.qpy.databinding.ActivityFtpBinding; 13 | 14 | /** 15 | * FTP service setting page 16 | * Created by Hmei on 2017-05-27. 17 | */ 18 | 19 | public class FTPActivity extends Activity { 20 | ActivityFtpBinding binding; 21 | @Override 22 | protected void onCreate(@Nullable Bundle savedInstanceState) { 23 | super.onCreate(savedInstanceState); 24 | binding = DataBindingUtil.setContentView(this, R.layout.activity_ftp); 25 | } 26 | 27 | public static void start(Context context) { 28 | Intent starter = new Intent(context, FTPActivity.class); 29 | context.startActivity(starter); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/activity/SplashActivity.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.activity; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | import android.support.annotation.Nullable; 6 | import android.support.v7.app.AppCompatActivity; 7 | 8 | import org.qpython.qpy.R; 9 | 10 | import java.util.Timer; 11 | import java.util.TimerTask; 12 | 13 | public class SplashActivity extends AppCompatActivity { 14 | 15 | @Override 16 | public void onCreate(@Nullable Bundle savedInstanceState) { 17 | super.onCreate(savedInstanceState); 18 | setContentView(R.layout.activity_splash); 19 | new Timer().schedule(new TimerTask() { 20 | @Override 21 | public void run() { 22 | Intent intent = new Intent(SplashActivity.this,HomeMainActivity.class); 23 | intent.setAction(getIntent().getAction()); 24 | startActivity(intent); 25 | finish(); 26 | } 27 | },1000); 28 | } 29 | 30 | } -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/adapter/EditorFileTreeAdapter.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.adapter; 2 | 3 | import org.greenrobot.eventbus.EventBus; 4 | import org.qpython.qpy.R; 5 | import org.qpython.qpy.databinding.ItemFolderLittleBinding; 6 | import org.qpython.qpy.main.app.App; 7 | import org.qpython.qpy.texteditor.EditorActivity; 8 | 9 | public class EditorFileTreeAdapter extends FileTreeAdapter { 10 | public EditorFileTreeAdapter(String rootPath) { 11 | super(rootPath); 12 | 13 | } 14 | 15 | @Override 16 | void itemClick(ItemFolderLittleBinding binding, FileTreeAdapter.FileTreeBean folderBean) { 17 | String[] ext = App.getContext().getResources().getStringArray(R.array.text_ext); 18 | EditorActivity.OpenFileEvent openFileEvent = new EditorActivity.OpenFileEvent(); 19 | for (String s : ext) { 20 | if (folderBean.name.endsWith(s)) { 21 | openFileEvent.filePath = folderBean.path; 22 | } 23 | } 24 | EventBus.getDefault().post(openFileEvent); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/adapter/MyViewHolder.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.adapter; 2 | 3 | import android.databinding.DataBindingUtil; 4 | import android.databinding.ViewDataBinding; 5 | import android.support.v7.widget.RecyclerView; 6 | import android.view.View; 7 | 8 | /** 9 | * Custom View Holder for store data binding 10 | * Created by Hmei on 2017-05-25. 11 | */ 12 | 13 | public class MyViewHolder extends RecyclerView.ViewHolder { 14 | private T binding; 15 | 16 | public MyViewHolder(View itemView) { 17 | super(itemView); 18 | binding = DataBindingUtil.bind(itemView); 19 | } 20 | 21 | public T getBinding() { 22 | return binding; 23 | } 24 | 25 | public void setBinding(T binding) { 26 | this.binding = binding; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/app/CONF.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.app; 2 | 3 | import com.quseit.util.NAction; 4 | 5 | import org.qpython.qpysdk.QPyConstants; 6 | 7 | public class CONF implements QPyConstants { 8 | 9 | public static final String LIB_DOWNLOAD_TEMP = QPyConstants.ABSOLUTE_PATH + "/cache"; 10 | public static final String QPYPI_URL = "https://pypi.org/simple/"; 11 | 12 | public static final String NOTIFICATION_SP_NAME = "NOTIFICATION_EXTRA"; 13 | public static final String NOTIFICATION_SP_OBJ = "NOTIFICATION_OBJ"; 14 | 15 | public static final String IAP_NUM_REQUEST_URL = "http://apu.quseit.com/conf/iaplognum/org.qpython.qpy/"; 16 | public static final String GOOGLE_ID_TOKEN = "955258715976-i6t5usa0tjg8favq17lsfaj885l4lilv.apps.googleusercontent.com"; 17 | 18 | public static final String CLOUD_MAP_CACHE_PATH = QPyConstants.ABSOLUTE_PATH + "/lib/.cloud_cache"; 19 | 20 | public static String qpypiPath() { 21 | return App.getContext().getFilesDir().getAbsolutePath() + "/lib/python"+(NAction.isQPy3(App.getContext())?"3.6":"2.7")+"/site-packages/"; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/model/AppModel.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.model; 2 | 3 | import android.graphics.drawable.Drawable; 4 | import android.support.annotation.DrawableRes; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * @credit http://developer.android.com/reference/android/content/AsyncTaskLoader.html 10 | */ 11 | public abstract class AppModel implements Serializable{ 12 | String mAppLabel; 13 | Drawable mIcon; 14 | 15 | public abstract Drawable getIcon(); 16 | public abstract String getLabel(); 17 | 18 | public abstract @DrawableRes int getIconRes(); 19 | } 20 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/receiver/BootBroadcastReceiver.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.receiver; 2 | 3 | import android.content.BroadcastReceiver; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | import android.util.Log; 7 | import android.os.Build; 8 | 9 | import org.qpython.qsl4a.QPyScriptService; 10 | 11 | 12 | public class BootBroadcastReceiver extends BroadcastReceiver { 13 | 14 | private static final String TAG = "QPyScriptServiceR"; 15 | 16 | @Override 17 | public void onReceive(Context context, Intent intent) { 18 | 19 | Log.d(TAG, "BootReceiver.onReceive: " + intent.getAction()); 20 | System.out.println("QPYSL4A程序即将执行"); 21 | 22 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { 23 | 24 | } else { 25 | 26 | try { 27 | context.startService(new Intent(context, QPyScriptService.class)); 28 | } catch (RuntimeException e) { 29 | 30 | } 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/server/CacheKey.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.server; 2 | 3 | 4 | public class CacheKey { 5 | public static final String LIB = "lib"; 6 | public static final String QPYPI = "qpypi"; 7 | public static final String AIPY = "aipy"; 8 | 9 | public static final String LIB_LAST_REFRESH = "lib_last_refresh"; 10 | public static final String QPYPI_LAST_REFRESH = "qpypi_last_refresh"; 11 | public static final String AIPY_LAST_REFRESH = "aipy_last_refresh"; 12 | 13 | public static final String COURSE_RECOMMEND = "course_recommend"; 14 | public static final String COURSE_LATEST = "course_latest"; 15 | 16 | public static final String CLOUD_FILE = "cloud_file"; 17 | } 18 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/server/MySubscriber.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.server; 2 | 3 | import android.widget.Toast; 4 | 5 | import org.qpython.qpy.R; 6 | import org.qpython.qpy.main.app.App; 7 | 8 | import java.net.ConnectException; 9 | 10 | import retrofit2.adapter.rxjava.HttpException; 11 | import rx.Subscriber; 12 | 13 | /** 14 | * 15 | * Created by Hmei on 2017-06-29. 16 | */ 17 | 18 | public class MySubscriber extends Subscriber { 19 | @Override 20 | public void onCompleted() { 21 | 22 | } 23 | 24 | @Override 25 | public void onError(Throwable e) { 26 | if (e instanceof ConnectException | e instanceof HttpException) { 27 | Toast.makeText(App.getContext(), R.string.lost_connect, Toast.LENGTH_SHORT).show(); 28 | } else { 29 | Toast.makeText(App.getContext(), e.getMessage(), Toast.LENGTH_SHORT).show(); 30 | } 31 | } 32 | 33 | @Override 34 | public void onNext(T o) { 35 | 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/server/gist/Api.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.server.gist; 2 | 3 | /** 4 | * 文 件 名: Api 5 | * 创 建 人: ZhangRonghua 6 | * 创建日期: 2018/3/8 17:28 7 | * 修改时间: 8 | * 修改备注: 9 | */ 10 | 11 | public class Api { 12 | public static final String BASE_URL = "http://gist.qpython.org"; 13 | } 14 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/server/gist/BaseView.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.server.gist; 2 | 3 | /** 4 | * 文 件 名: BaseView 5 | * 创 建 人: ZhangRonghua 6 | * 创建日期: 2018/3/8 16:42 7 | * 修改时间: 8 | * 修改备注: 9 | */ 10 | 11 | public interface BaseView { 12 | void showLoading(); 13 | void hideLoading(); 14 | void showToast(String msg); 15 | } 16 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/server/gist/TokenManager.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.server.gist; 2 | 3 | import android.content.Context; 4 | import android.content.SharedPreferences; 5 | 6 | /** 7 | * 文 件 名: TokenManager 8 | * 创 建 人: ZhangRonghua 9 | * 创建日期: 2018/3/8 16:13 10 | * 修改时间: 11 | * 修改备注: 12 | */ 13 | 14 | public class TokenManager { 15 | private static SharedPreferences sharedPreferences; 16 | private static final String TOKEN_KEY = "token"; 17 | private static final String GIST_KEY = "gist"; 18 | 19 | public static void init(Context context){ 20 | sharedPreferences = context.getSharedPreferences(GIST_KEY,Context.MODE_PRIVATE); 21 | } 22 | 23 | public static String getToken(){ 24 | return sharedPreferences.getString(TOKEN_KEY,""); 25 | } 26 | 27 | public static void saveToken(String token){ 28 | sharedPreferences.edit().putString(TOKEN_KEY,token).apply(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/server/gist/createScreen/CreateGistView.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.server.gist.createScreen; 2 | 3 | import org.qpython.qpy.main.server.gist.BaseView; 4 | 5 | /** 6 | * 文 件 名: CreateView 7 | * 创 建 人: ZhangRonghua 8 | * 创建日期: 2018/3/9 10:50 9 | * 修改时间: 10 | * 修改备注: 11 | */ 12 | 13 | public interface CreateGistView extends BaseView { 14 | void onSuccess(String id); 15 | } 16 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/server/gist/detailScreen/DetailView.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.server.gist.detailScreen; 2 | 3 | import org.qpython.qpy.main.server.gist.BaseView; 4 | import org.qpython.qpy.main.server.gist.response.CommentBean; 5 | import org.qpython.qpy.main.server.gist.response.GistBean; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * 文 件 名: DetailView 11 | * 创 建 人: ZhangRonghua 12 | * 创建日期: 2018/3/9 10:57 13 | * 修改时间: 14 | * 修改备注: 15 | */ 16 | 17 | public interface DetailView extends BaseView { 18 | void setData(GistBean gistBean); 19 | 20 | void loadMoreComments(List list); 21 | 22 | void favorite(boolean is); 23 | 24 | void addComment(CommentBean comment); 25 | 26 | void fork(); 27 | 28 | void forkSuccess(); 29 | 30 | void refresh(String id); 31 | } 32 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/server/gist/indexScreen/GistHomeView.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.server.gist.indexScreen; 2 | 3 | import org.qpython.qpy.main.server.gist.BaseView; 4 | import org.qpython.qpy.main.server.gist.response.ADBean; 5 | import org.qpython.qpy.main.server.gist.response.GistBean; 6 | import org.qpython.qpy.main.server.model.CourseAdModel; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * 文 件 名: GistHomeView 12 | * 创 建 人: ZhangRonghua 13 | * 创建日期: 2018/3/9 11:47 14 | * 修改时间: 15 | * 修改备注: 16 | */ 17 | 18 | public interface GistHomeView extends BaseView { 19 | void setData(List list); 20 | void loadMoreGist(List list); 21 | void favorite(boolean is); 22 | void showError(String msg); 23 | void hideError(); 24 | void setAD(List list); 25 | void hideAd(); 26 | } 27 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/server/gist/loginScreen/LoginView.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.server.gist.loginScreen; 2 | 3 | import org.qpython.qpy.main.server.gist.BaseView; 4 | 5 | /** 6 | * 文 件 名: LoginView 7 | * 创 建 人: ZhangRonghua 8 | * 创建日期: 2018/3/8 17:12 9 | * 修改时间: 10 | * 修改备注: 11 | */ 12 | 13 | public interface LoginView extends BaseView { 14 | void loginSuccess(); 15 | } 16 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/server/gist/myScreen/MyGistView.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.server.gist.myScreen; 2 | 3 | import org.qpython.qpy.main.server.gist.BaseView; 4 | import org.qpython.qpy.main.server.gist.response.GistBean; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 文 件 名: MyGistView 10 | * 创 建 人: ZhangRonghua 11 | * 创建日期: 2018/3/9 17:16 12 | * 修改时间: 13 | * 修改备注: 14 | */ 15 | 16 | public interface MyGistView extends BaseView { 17 | void deleteSuccess(String id); 18 | void addFavorites(List list); 19 | void addGists(List list); 20 | } 21 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/server/gist/request/BaseRequest.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.server.gist.request; 2 | 3 | 4 | import java.io.Serializable; 5 | 6 | /** 7 | * 文 件 名: BaseRequest 8 | * 创 建 人: ZhangRonghua 9 | * 创建日期: 2018/3/9 10:07 10 | * 修改时间: 11 | * 修改备注: 12 | */ 13 | 14 | public class BaseRequest extends Request implements Serializable{ 15 | public String gist_id; 16 | 17 | public BaseRequest(String gistId) { 18 | this.gist_id = gistId; 19 | } 20 | 21 | public String getGist_id() { 22 | return gist_id; 23 | } 24 | 25 | public void setGist_id(String gist_id) { 26 | this.gist_id = gist_id; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/server/gist/request/Request.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.server.gist.request; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * 文 件 名: Request 7 | * 创 建 人: ZhangRonghua 8 | * 创建日期: 2018/3/9 16:43 9 | * 修改时间: 10 | * 修改备注: 11 | */ 12 | 13 | public class Request implements Serializable{ 14 | 15 | } 16 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/server/gist/request/UpdateGistRequest.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.server.gist.request; 2 | 3 | /** 4 | * 文 件 名: UpdateGistRequest 5 | * 创 建 人: ZhangRonghua 6 | * 创建日期: 2018/3/9 10:14 7 | * 修改时间: 8 | * 修改备注: 9 | */ 10 | 11 | public class UpdateGistRequest extends BaseRequest { 12 | 13 | private String title; 14 | private String code; 15 | private String desc; 16 | 17 | public UpdateGistRequest(String gistId, String title, String desc, String code) { 18 | super(gistId); 19 | this.title = title; 20 | this.code = code; 21 | this.desc = desc; 22 | } 23 | 24 | public String getTitle() { 25 | return title; 26 | } 27 | 28 | public void setTitle(String title) { 29 | this.title = title; 30 | } 31 | 32 | public String getCode() { 33 | return code; 34 | } 35 | 36 | public void setCode(String code) { 37 | this.code = code; 38 | } 39 | 40 | public String getDesc() { 41 | return desc; 42 | } 43 | 44 | public void setDesc(String desc) { 45 | this.desc = desc; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/server/gist/response/ADBean.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.server.gist.response; 2 | 3 | /** 4 | * 文 件 名: ADBean 5 | * 创 建 人: ZhangRonghua 6 | * 创建日期: 2018/3/12 17:47 7 | * 修改时间: 8 | * 修改备注: 9 | */ 10 | 11 | public class ADBean { 12 | private String link; 13 | private String imgUrl; 14 | private String title; 15 | 16 | public String getTitle() { 17 | return title; 18 | } 19 | 20 | public void setTitle(String title) { 21 | this.title = title; 22 | } 23 | 24 | public String getLink() { 25 | return link; 26 | } 27 | 28 | public void setLink(String link) { 29 | this.link = link; 30 | } 31 | 32 | public String getImgUrl() { 33 | return imgUrl; 34 | } 35 | 36 | public void setImgUrl(String imgUrl) { 37 | this.imgUrl = imgUrl; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/server/gist/response/LoginResponse.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.server.gist.response; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | /** 6 | * 文 件 名: LoginResponse 7 | * 创 建 人: ZhangRonghua 8 | * 创建日期: 2018/3/8 16:09 9 | * 修改时间: 10 | * 修改备注: 11 | */ 12 | 13 | public class LoginResponse { 14 | @SerializedName(value = "token") 15 | private String token; 16 | 17 | public String getToken() { 18 | return token; 19 | } 20 | 21 | public void setToken(String token) { 22 | this.token = token; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/server/gist/response/ResponseBean.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.server.gist.response; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | /** 6 | * 文 件 名: ResponseBean 7 | * 创 建 人: ZhangRonghua 8 | * 创建日期: 2018/3/8 14:46 9 | * 修改时间: 10 | * 修改备注: 11 | */ 12 | 13 | public class ResponseBean { 14 | @SerializedName(value = "msg") 15 | private String message; 16 | @SerializedName(value = "errno") 17 | private int code; 18 | @SerializedName(value = "data") 19 | private T data; 20 | 21 | public String getMessage() { 22 | return message; 23 | } 24 | 25 | public void setMessage(String message) { 26 | this.message = message; 27 | } 28 | 29 | public int getCode() { 30 | return code; 31 | } 32 | 33 | public void setCode(int code) { 34 | this.code = code; 35 | } 36 | 37 | public T getData() { 38 | return data; 39 | } 40 | 41 | public void setData(T data) { 42 | this.data = data; 43 | } 44 | 45 | public boolean success(){ 46 | return code == 0; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/server/gist/response/UserBean.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.server.gist.response; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | 5 | /** 6 | * 文 件 名: UserBean 7 | * 创 建 人: ZhangRonghua 8 | * 创建日期: 2018/3/9 09:40 9 | * 修改时间: 10 | * 修改备注: 11 | */ 12 | 13 | public class UserBean { 14 | @SerializedName(value = "uname") 15 | private String uName; 16 | 17 | @SerializedName(value = "username") 18 | private String userName; 19 | @SerializedName(value = "avatar") 20 | private String avatar; 21 | 22 | 23 | public String getUserName() { 24 | return userName; 25 | } 26 | 27 | public String getUName() { 28 | return uName; 29 | } 30 | 31 | public void setUserName(String userName) { 32 | this.userName = userName; 33 | } 34 | 35 | public String getAvatar() { 36 | return avatar; 37 | } 38 | 39 | public void setAvatar(String avatar) { 40 | this.avatar = avatar; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/server/gist/service/GistServiceFactory.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.server.gist.service; 2 | 3 | import org.qpython.qpy.main.server.http.Retrofitor; 4 | 5 | /** 6 | * 文 件 名: GistServiceFactory 7 | * 创 建 人: ZhangRonghua 8 | * 创建日期: 2018/3/8 16:04 9 | * 修改时间: 10 | * 修改备注: 11 | */ 12 | 13 | public class GistServiceFactory { 14 | 15 | public static GistService gist(){ 16 | return Retrofitor.getInstance().createService(GistService.class); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/server/model/PayStatusModel.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.server.model; 2 | 3 | /** 4 | * Created by Hmei 5 | * 2/11/18. 6 | */ 7 | 8 | public class PayStatusModel { 9 | 10 | 11 | /** 12 | * errorno : 0 13 | * payed : 1 14 | * msg : 15 | */ 16 | 17 | private int errorno; 18 | private int payed; // >0 -> 已参与众筹/购买 19 | private String msg; 20 | 21 | public int getErrorno() { 22 | return errorno; 23 | } 24 | 25 | public void setErrorno(int errorno) { 26 | this.errorno = errorno; 27 | } 28 | 29 | public int getPayed() { 30 | return payed; 31 | } 32 | 33 | public void setPayed(int payed) { 34 | this.payed = payed; 35 | } 36 | 37 | public String getMsg() { 38 | return msg; 39 | } 40 | 41 | public void setMsg(String msg) { 42 | this.msg = msg; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/server/model/QpypiModel.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.server.model; 2 | 3 | public class QpypiModel extends BaseLibModel{ 4 | public QpypiModel(String title) { 5 | super(title); 6 | } 7 | 8 | /** 9 | * src : http://qpypi.qpython.org/pyshop/package/numpy 10 | * rdate : 2017-06-01 11 | * link : http://pip:qpython@qpypi.qpython.org:11000/simple 12 | * smodule : numpy 13 | * description : numPy is the fundamental package needed for scientific computing with Python 14 | * title : Numpy 15 | * ver : 1.9.2 16 | * downloads : 20229 17 | * cat : qpypi 18 | */ 19 | } 20 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/service/FTPServerService.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.service; 2 | 3 | import org.qpython.qpy.main.activity.SettingActivity; 4 | 5 | /** 6 | * Created by Hmei on 2017-06-13. 7 | */ 8 | 9 | public class FTPServerService extends org.swiftp.FTPServerService { 10 | @Override 11 | protected Class getSettingClass() { 12 | return SettingActivity.class; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/service/QPyService.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.service; 2 | 3 | import android.app.IntentService; 4 | import android.content.Intent; 5 | import android.support.annotation.Nullable; 6 | 7 | /** 8 | * Receive QPY broadcast and exec python programs 9 | * Created by Hmei on 2017-07-25. 10 | */ 11 | 12 | public class QPyService extends IntentService { 13 | 14 | /** 15 | * Creates an IntentService. Invoked by your subclass's constructor. 16 | * 17 | // * @param name Used to name the worker thread, important only for debugging. 18 | */ 19 | public QPyService() { 20 | super("QPyService"); 21 | } 22 | 23 | @Override 24 | protected void onHandleIntent(@Nullable Intent intent) { 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/utils/Bus.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.utils; 2 | 3 | 4 | import org.greenrobot.eventbus.EventBus; 5 | 6 | public class Bus { 7 | private static final EventBus INSTANCE = new EventBus(); 8 | 9 | public static EventBus getDefault() { 10 | return INSTANCE; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/widget/Indent.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.widget; 2 | 3 | /** 4 | * Created by Hmei 5 | * 11/20/17 6 | */ 7 | public interface Indent { 8 | void rightIndent(); 9 | 10 | void leftIndent(); 11 | 12 | void tabIndent(); 13 | 14 | void delIndent(); 15 | } 16 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/widget/LoadingDialog.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.widget; 2 | 3 | import android.app.Dialog; 4 | import android.content.Context; 5 | import android.support.annotation.NonNull; 6 | 7 | import org.qpython.qpy.R; 8 | 9 | /** 10 | * 文 件 名: LoadingDialog 11 | * 创 建 人: ZhangRonghua 12 | * 创建日期: 2018/1/10 10:07 13 | * 邮 箱: qq798435167@gmail.com 14 | * 修改时间: 15 | * 修改备注: 16 | */ 17 | 18 | public class LoadingDialog extends Dialog { 19 | public LoadingDialog(@NonNull Context context) { 20 | super(context, R.style.BaseDialog); 21 | setContentView(R.layout.dialog_loading); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/widget/RatioImageView.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.widget; 2 | 3 | import android.content.Context; 4 | import android.support.v7.widget.AppCompatImageView; 5 | import android.util.AttributeSet; 6 | 7 | /** 8 | * Created by Hmei on 2017-08-04. 9 | */ 10 | 11 | public class RatioImageView extends AppCompatImageView { 12 | 13 | public RatioImageView(Context context) { 14 | super(context); 15 | } 16 | 17 | public RatioImageView(Context context, AttributeSet attrs) { 18 | super(context, attrs); 19 | } 20 | 21 | public RatioImageView(Context context, AttributeSet attrs, int defStyleAttr) { 22 | super(context, attrs, defStyleAttr); 23 | } 24 | 25 | @Override 26 | protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 27 | super.onMeasure(widthMeasureSpec, heightMeasureSpec); 28 | int measuredWidth = MeasureSpec.getSize(widthMeasureSpec); 29 | setMeasuredDimension(measuredWidth, measuredWidth / 3); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/main/widget/expandableview/ExpandableLayoutListener.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.main.widget.expandableview; 2 | 3 | public interface ExpandableLayoutListener { 4 | /** 5 | * Notifies the start of the animation. 6 | * Sync from android.animation.Animator.AnimatorListener.onAnimationStart(Animator animation) 7 | */ 8 | void onAnimationStart(); 9 | 10 | /** 11 | * Notifies the end of the animation. 12 | * Sync from android.animation.Animator.AnimatorListener.onAnimationEnd(Animator animation) 13 | */ 14 | void onAnimationEnd(); 15 | 16 | /** 17 | * Notifies the layout is going to open. 18 | */ 19 | void onPreOpen(); 20 | 21 | /** 22 | * Notifies the layout is going to equal close size. 23 | */ 24 | void onPreClose(); 25 | 26 | /** 27 | * Notifies the layout opened. 28 | */ 29 | void onOpened(); 30 | 31 | /** 32 | * Notifies the layout size equal closed size. 33 | */ 34 | void onClosed(); 35 | } -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/plugin/Common.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.plugin; 2 | 3 | public class Common { 4 | public static class PluginChangeEvent { 5 | 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/plugin/SpaceItemDecoration.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.plugin; 2 | 3 | import android.graphics.Rect; 4 | import android.support.v7.widget.RecyclerView; 5 | import android.view.View; 6 | 7 | public class SpaceItemDecoration extends RecyclerView.ItemDecoration { 8 | private final int mSpace; 9 | 10 | public SpaceItemDecoration(int space) { 11 | mSpace = space; 12 | } 13 | 14 | @Override 15 | public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { 16 | outRect.top = mSpace; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/plugin/model/LocalPluginBean.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.plugin.model; 2 | 3 | import io.realm.RealmObject; 4 | import io.realm.annotations.PrimaryKey; 5 | 6 | public class LocalPluginBean extends RealmObject { 7 | 8 | @PrimaryKey 9 | private String name; 10 | 11 | private String title; 12 | 13 | private String src; 14 | 15 | public LocalPluginBean() { 16 | } 17 | 18 | public LocalPluginBean(String name, String title, String src) { 19 | this.name = name; 20 | this.title = title; 21 | this.src = src; 22 | } 23 | 24 | public String getName() { 25 | return name; 26 | } 27 | 28 | public void setName(String name) { 29 | this.name = name; 30 | } 31 | 32 | public String getTitle() { 33 | return title; 34 | } 35 | 36 | public void setTitle(String title) { 37 | this.title = title; 38 | } 39 | 40 | public String getSrc() { 41 | return src; 42 | } 43 | 44 | public void setSrc(String src) { 45 | this.src = src; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/program/BindingHolder.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.program; 2 | 3 | 4 | import android.databinding.ViewDataBinding; 5 | import android.support.v7.widget.RecyclerView; 6 | 7 | public class BindingHolder extends RecyclerView.ViewHolder { 8 | public final T binding; 9 | 10 | public BindingHolder(T binding) { 11 | super(binding.getRoot()); 12 | this.binding = binding; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/texteditor/Bean.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.texteditor; 2 | 3 | import android.content.Context; 4 | 5 | public class Bean{ 6 | protected String title; 7 | protected Context context; 8 | //private final String TAG = "BEAN"; 9 | 10 | public Bean(Context context) { 11 | this.context = context; 12 | } 13 | 14 | public String getTitle(){ 15 | return this.title; 16 | } 17 | 18 | public void setTitle(String title){ 19 | this.title = title; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/texteditor/FTPServerService.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.texteditor; 2 | 3 | public class FTPServerService extends org.swiftp.FTPServerService { 4 | 5 | @Override 6 | protected Class getSettingClass() { 7 | return MFTPSettingActivity.class; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/texteditor/androidlib/common/UIUtils.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.texteditor.androidlib.common; 2 | 3 | import android.content.Context; 4 | 5 | /** 6 | * 7 | */ 8 | public class UIUtils { 9 | 10 | /** 11 | * @param context 12 | * the current application context 13 | * @param dp 14 | * the dip value to convert 15 | * @return the px value corresponding to the given dip 16 | */ 17 | public static int getPxFromDp(Context context, int dp) { 18 | float scale = context.getResources().getDisplayMetrics().density; 19 | 20 | return ((int) ((dp * scale) + 0.5f)); 21 | 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/texteditor/androidlib/comparator/ComparatorFilesAlpha.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.texteditor.androidlib.comparator; 2 | 3 | import android.annotation.SuppressLint; 4 | import java.io.File; 5 | import java.util.Comparator; 6 | 7 | /** 8 | * Compare files Alphabetically (w/ folders listed first) 9 | * 10 | * @author x.gouchet 11 | * 12 | */ 13 | @SuppressLint("DefaultLocale") 14 | public class ComparatorFilesAlpha implements Comparator { 15 | 16 | /** 17 | * @see Comparator#compare(Object, Object) 18 | */ 19 | public int compare(File file1, File file2) { 20 | int result; 21 | 22 | // sort folders first 23 | if ((file1.isDirectory()) && (!file2.isDirectory())) { 24 | result = -1; 25 | } else if ((!file1.isDirectory()) && (file2.isDirectory())) { 26 | result = 1; 27 | } else { 28 | // here both are folders or both are files : sort alpha 29 | result = file1.getName().toLowerCase() 30 | .compareTo(file2.getName().toLowerCase()); 31 | } 32 | 33 | return result; 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/texteditor/androidlib/ui/adapter/ThumbnailProvider.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.texteditor.androidlib.ui.adapter; 2 | 3 | import android.content.Context; 4 | import android.graphics.drawable.Drawable; 5 | 6 | import java.io.File; 7 | 8 | public interface ThumbnailProvider { 9 | 10 | public Drawable getThumbnailForFile(Context context, File file); 11 | } 12 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/texteditor/common/CommonEnums.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.texteditor.common; 2 | 3 | /** 4 | * Created by Hmei on 2017-05-11. 5 | */ 6 | 7 | public class CommonEnums { 8 | public enum FileType { 9 | FOLDER, 10 | FILE, 11 | PROJECT, 12 | SCRIPT 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/texteditor/common/ComparatorFilesAlpha.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.texteditor.common; 2 | 3 | import java.io.File; 4 | import java.util.Comparator; 5 | 6 | /** 7 | * Compare files Alphabetically (w/ folders listed first) 8 | * 9 | * @author x.gouchet 10 | * 11 | */ 12 | public class ComparatorFilesAlpha implements Comparator { 13 | 14 | /** 15 | * @see Comparator#compare(Object, Object) 16 | */ 17 | @Override 18 | public int compare(File file1, File file2) { 19 | // sort folders first 20 | if ((file1.isDirectory()) && (!file2.isDirectory())) 21 | return -1; 22 | if ((!file1.isDirectory()) && (file2.isDirectory())) 23 | return 1; 24 | 25 | // here both are folders or both are files : sort alpha 26 | return file1.getName().toLowerCase().compareTo( 27 | file2.getName().toLowerCase()); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/texteditor/common/FontUtils.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.texteditor.common; 2 | 3 | import java.io.File; 4 | 5 | import android.content.Context; 6 | 7 | public class FontUtils { 8 | 9 | /** 10 | * @param ctx 11 | * the current application context 12 | * @return the app folder for fonts 13 | */ 14 | public static File getAppFontFolder(Context ctx) { 15 | return ctx.getDir(Constants.FONT_FOLDER_NAME, Context.MODE_PRIVATE); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/texteditor/common/TedChangelog.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.texteditor.common; 2 | 3 | import org.qpython.qpy.R; 4 | 5 | public class TedChangelog extends org.qpython.qpy.texteditor.androidlib.common.ChangeLog { 6 | 7 | /** 8 | * @see fr.xgouchet.androidlib.common.ChangeLog#getTitleResourceForVersion(int) 9 | */ 10 | @Override 11 | public int getTitleResourceForVersion(int version) { 12 | int res = 0; 13 | switch (version) { 14 | case 18: 15 | default: 16 | res = R.string.release18; 17 | } 18 | return res; 19 | } 20 | 21 | /** 22 | * @see fr.xgouchet.androidlib.common.ChangeLog#getChangeLogResourceForVersion(int) 23 | */ 24 | @Override 25 | public int getChangeLogResourceForVersion(int version) { 26 | int res = 0; 27 | switch (version) { 28 | case 18: 29 | default: 30 | res = R.string.release18_log; 31 | } 32 | return res; 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/texteditor/newtexteditor/AfterTextChangeListener.java: -------------------------------------------------------------------------------- 1 | public interface AfterTextChangeListener { 2 | public void afterTextChange(); 3 | } 4 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/texteditor/newtexteditor/MyLayout.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.texteditor.newtexteditor; 2 | 3 | import android.graphics.Canvas; 4 | import android.graphics.Paint; 5 | import android.graphics.Rect; 6 | import android.text.TextPaint; 7 | 8 | public interface MyLayout { 9 | public float getLineHeight(); 10 | 11 | public void setLineHeight(float lineHeight); 12 | 13 | public int getLineForOffset(int start); 14 | 15 | public int getLineOffset(int line); 16 | 17 | public float getPrimaryHorizontal(int start); 18 | 19 | public void getLineBounds(int line, Rect mBoundsOfCursor); 20 | 21 | public int getLineForVertical(int top); 22 | 23 | public void draw(Canvas canvas); 24 | 25 | public int getLineCount(); 26 | 27 | public Paint getPaint(); 28 | 29 | public void setPaint(TextPaint paint); 30 | 31 | public int getOffsetForHorizontal(int line, float x); 32 | 33 | public int getHeight(); 34 | } 35 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/texteditor/newtexteditor/ScrollBar.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.texteditor.newtexteditor; 2 | 3 | import android.graphics.Canvas; 4 | import android.graphics.Color; 5 | import android.graphics.Paint; 6 | 7 | public class ScrollBar { 8 | final static float MINI_SCALE=0.1f; 9 | float mAll=100; 10 | float mStart=8; 11 | float mEnd=9; 12 | float mWidth; 13 | float mHeight; 14 | Paint mPaint=new Paint(); 15 | public ScrollBar() { 16 | mPaint.setColor(Color.GRAY); 17 | } 18 | 19 | public void draw(Canvas canvas){ 20 | float x=mWidth*(mStart/mAll); 21 | float y=mWidth*(mEnd/mAll); 22 | canvas.drawRect(x, 0, y, mHeight, mPaint); 23 | } 24 | 25 | public void setSize(float width,float height) 26 | { 27 | mWidth=width; 28 | mHeight=height; 29 | } 30 | 31 | public void setPosition(float all,float start,float end){ 32 | mAll=all; 33 | if(mAll<=0) 34 | mAll=1; 35 | mStart=start; 36 | mEnd=end; 37 | float scale=(mEnd-mStart)/mAll; 38 | if(scalemStart) 18 | return true; 19 | } 20 | else 21 | if(start>=mEnd){ 22 | return false; 23 | } 24 | else{ 25 | return true; 26 | } 27 | return false; 28 | } 29 | 30 | public boolean in(int pos){ 31 | if(pos>=mStart && pos=mEnd) 40 | return 1; 41 | return 0; 42 | } 43 | public int length() 44 | { 45 | return mEnd-mStart; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/texteditor/ui/adapter/MyViewHolder.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.texteditor.ui.adapter; 2 | 3 | import android.databinding.DataBindingUtil; 4 | import android.databinding.ViewDataBinding; 5 | import android.support.v7.widget.RecyclerView; 6 | import android.view.View; 7 | import android.view.ViewGroup; 8 | 9 | 10 | public class MyViewHolder extends RecyclerView.ViewHolder { 11 | private B binding; 12 | 13 | public MyViewHolder(View itemView) { 14 | super(itemView); 15 | binding = DataBindingUtil.bind(itemView); 16 | } 17 | 18 | public B getBinding() { 19 | return binding; 20 | } 21 | 22 | public void setBinding(B binding) { 23 | this.binding = binding; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/texteditor/ui/view/MyEditTextPreference.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.texteditor.ui.view; 2 | 3 | import android.support.v7.app.AlertDialog; 4 | import android.content.Context; 5 | import android.os.Bundle; 6 | import android.preference.EditTextPreference; 7 | import android.util.AttributeSet; 8 | import android.view.View; 9 | 10 | /** 11 | * Created by Hmei on 2017-06-14. 12 | */ 13 | 14 | public class MyEditTextPreference extends EditTextPreference { 15 | public MyEditTextPreference(Context context, AttributeSet attrs, int defStyleAttr) { 16 | super(context, attrs, defStyleAttr); 17 | } 18 | 19 | public MyEditTextPreference(Context context, AttributeSet attrs) { 20 | super(context, attrs); 21 | } 22 | 23 | public MyEditTextPreference(Context context) { 24 | super(context); 25 | } 26 | 27 | @Override 28 | protected void showDialog(Bundle state) { 29 | 30 | super.showDialog(state); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/utils/OpenWebUtil.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.utils; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | import android.net.Uri; 6 | 7 | /** 8 | * 文 件 名: OpenWebUtil 9 | * 创 建 人: ZhangRonghua 10 | * 创建日期: 2017/12/29 12:18 11 | * 邮 箱: qq798435167@gmail.com 12 | * 修改时间: 13 | * 修改备注: 14 | */ 15 | 16 | public class OpenWebUtil { 17 | public static void open(Context context,String url){ 18 | Intent intent = new Intent(); 19 | intent.setAction(Intent.ACTION_VIEW); 20 | Uri content_url = Uri.parse(url); 21 | intent.setData(content_url); 22 | context.startActivity(Intent.createChooser(intent, "Please select your browser")); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /qpython/src/main/java/org/qpython/qpy/utils/SolfKeybroadUtil.java: -------------------------------------------------------------------------------- 1 | package org.qpython.qpy.utils; 2 | 3 | import android.content.Context; 4 | import android.view.View; 5 | import android.view.inputmethod.InputMethodManager; 6 | 7 | /** 8 | * 文 件 名: SolfKeybroadUtil 9 | * 创 建 人: ZhangRonghua 10 | * 创建日期: 2017/12/28 11:24 11 | * 邮 箱: qq798435167@gmail.com 12 | * 修改时间: 13 | * 修改备注: 14 | */ 15 | 16 | public class SolfKeybroadUtil { 17 | public static void showSolfInput(View view , boolean show) { 18 | InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 19 | if (show) { 20 | imm.showSoftInput(view, 0); 21 | } else { 22 | imm.hideSoftInputFromWindow(view.getWindowToken(), 0); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /qpython/src/main/res/anim/fade_in.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /qpython/src/main/res/anim/fade_out.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /qpython/src/main/res/anim/slide_down.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /qpython/src/main/res/anim/slide_in_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | -------------------------------------------------------------------------------- /qpython/src/main/res/anim/slide_out_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | -------------------------------------------------------------------------------- /qpython/src/main/res/anim/slide_up.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/aipy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/aipy.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/aipy_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/aipy_light.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/arrow_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/arrow_up.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/arvr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/arvr.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/arvr_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/arvr_light.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/basics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/basics.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/basics_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/basics_light.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/btn_close_window.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/btn_close_window.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/checked.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/database.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/database.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/database_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/database_light.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/download.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/editor_qrcode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/editor_qrcode.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/empty.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/gist_editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/gist_editor.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/horizontal_separation_line.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/horizontal_separation_line.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_about_mail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_about_mail.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_about_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_about_new.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_about_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_about_share.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_add.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_arrow_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_arrow_back.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_arrow_back_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_arrow_back_white.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_arrow_drop_down_a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_arrow_drop_down_a.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_arrow_drop_down_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_arrow_drop_down_b.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_back.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_cloud_done.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_cloud_done.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_cloud_download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_cloud_download.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_cloud_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_cloud_list.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_cloud_notdone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_cloud_notdone.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_cloud_upload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_cloud_upload.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_com_comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_com_comment.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_com_copylink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_com_copylink.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_com_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_com_delete.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_com_facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_com_facebook.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_com_like.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_com_like.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_com_liked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_com_liked.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_com_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_com_share.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_com_sharecode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_com_sharecode.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_com_twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_com_twitter.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_cou_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_cou_share.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_course_clicks.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_course_clicks.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_delete.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editcode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editcode.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editcode_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editcode_add.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editor_arrow_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editor_arrow_down.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editor_arrow_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editor_arrow_left.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editor_arrow_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editor_arrow_right.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editor_arrow_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editor_arrow_up.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editor_delete_name.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editor_delete_name.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editor_file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editor_file.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editor_file_little.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editor_file_little.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editor_filetree_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editor_filetree_close.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editor_folder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editor_folder.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editor_folder_little.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editor_folder_little.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editor_gist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editor_gist.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editor_keyboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editor_keyboard.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editor_keyboardlock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editor_keyboardlock.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editor_more_horiz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editor_more_horiz.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editor_newfolder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editor_newfolder.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editor_next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editor_next.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editor_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editor_open.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editor_recent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editor_recent.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editor_run.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editor_run.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editor_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editor_save.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editor_saveas.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editor_saveas.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editor_saveup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editor_saveup.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editor_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editor_search.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editor_sharecode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editor_sharecode.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editor_snippet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editor_snippet.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editor_undo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editor_undo.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editor_unknown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editor_unknown.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_editor_web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_editor_web.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_edittext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_edittext.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_edittext_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_edittext_add.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_file_rename.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_file_rename.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_folder_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_folder_open.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_gist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_gist.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_go.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_go.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_home_club.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_home_club.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_home_course.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_home_course.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_home_editor.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_home_editor.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_home_file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_home_file.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_home_gist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_home_gist.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_home_library.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_home_library.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_home_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_home_more.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_home_program.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_home_program.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_home_qpy_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_home_qpy_add.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_home_qpyapp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_home_qpyapp.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_home_scan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_home_scan.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_home_terminal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_home_terminal.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_ipynb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_ipynb.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_keyboard_arrow_right_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_keyboard_arrow_right_white.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_keyboard_hide_black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_keyboard_hide_black.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_library.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_library.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_library_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_library_delete.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_library_detail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_library_detail.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_library_download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_library_download.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_library_install.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_library_install.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_library_reinstall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_library_reinstall.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_library_run.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_library_run.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_library_upgrade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_library_upgrade.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_login.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_menu_preferences.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_menu_preferences.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_menu_windows.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_menu_windows.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_more.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_notebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_notebook.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_open.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_play.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_program.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_program.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_program_install.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_program_install.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_project_console.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_project_console.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_project_kivy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_project_kivy.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_project_kivy3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_project_kivy3.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_project_qapp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_project_qapp.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_project_qapp3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_project_qapp3.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_project_webapp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_project_webapp.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_project_webapp3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_project_webapp3.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_pyfile_kivy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_pyfile_kivy.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_pyfile_kivy3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_pyfile_kivy3.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_pyfile_qapp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_pyfile_qapp.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_pyfile_qapp3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_pyfile_qapp3.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_pyfile_webapp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_pyfile_webapp.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_pyfile_webapp3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_pyfile_webapp3.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_qpypi_download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_qpypi_download.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_recent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_recent.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_remove.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_remove.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_richpush_actionbar_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_richpush_actionbar_back.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_richpush_actionbar_divider.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_richpush_actionbar_divider.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_right.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_save1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_save1.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_save2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_save2.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_stepin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_stepin.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_tab2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_tab2.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_terminal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_terminal.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_thumb_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_thumb_up.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_undo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_undo.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_undo_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_undo_2.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/ic_white_arrow_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/ic_white_arrow_right.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/img_course.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/img_course.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/img_empty_net.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/img_empty_net.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/img_emptycourse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/img_emptycourse.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/img_home_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/img_home_bg.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/img_home_bg_land.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/img_home_bg_land.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/img_home_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/img_home_logo.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/img_home_logo_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/img_home_logo_3.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/img_homebar_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/img_homebar_bg.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/img_me_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/img_me_bg.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/mohu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/mohu.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/panel_bg.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/panel_bg.9.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/prev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/prev.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/redo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/redo.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/scan_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/scan_image.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/sorry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/sorry.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/terminal_mini_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/terminal_mini_icon.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/textfield_black.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/textfield_black.9.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/textfield_dracula.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/textfield_dracula.9.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/textfield_matrix.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/textfield_matrix.9.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/textfield_sky.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/textfield_sky.9.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/textfield_white.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/textfield_white.9.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/transparent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/transparent.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/undo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/undo.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/up.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/web.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable-xxhdpi/web_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/qpython-android/qpython/0a17ff84dece9f3e3473032733b21d6fc20000ef/qpython/src/main/res/drawable-xxhdpi/web_light.png -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/bg_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/bg_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/close_background.xml: -------------------------------------------------------------------------------- 1 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/corners_5_white_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/edit_text_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/edit_text_cursor.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/edit_text_green_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 9 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/gray_btn_rect.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 8 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/gray_line_btn_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/green_btn_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 8 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/green_btn_rect.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 8 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/green_dot_shape.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/green_gray_btn.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/green_rect_line.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/ic_check_circle.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/ic_clear_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/ic_right_a.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/notebook_checkbox.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/purchase_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/richpush_btn_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 14 | 15 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/rotate_arrow.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/select_green_text.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/select_tab_indicator.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/silver_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/star_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/toolbar_button_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/white_dot_shape.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/white_rect_stroke.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/widget_title_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /qpython/src/main/res/drawable/yellow_bg_thumbs_up.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 9 | 12 | 13 | 14 | 19 | -------------------------------------------------------------------------------- /qpython/src/main/res/layout-v14/buttons_ok_cancel.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 30 | 31 | -------------------------------------------------------------------------------- /qpython/src/main/res/layout/popup_add_editor.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 13 | -------------------------------------------------------------------------------- /qpython/src/main/res/layout/widget_banner.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 16 | -------------------------------------------------------------------------------- /qpython/src/main/res/layout/widget_no_net.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 11 | 12 | 17 | 18 | 25 | 26 | -------------------------------------------------------------------------------- /qpython/src/main/res/layout/widget_shortcut.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /qpython/src/main/res/layout/widget_shortcut_btn.xml: -------------------------------------------------------------------------------- 1 | 2 |